【问题标题】:Difference between these two statements? - C++这两种说法的区别? - C++
【发布时间】:2011-01-14 05:22:07
【问题描述】:

我是一名试图更好地理解指针的编程学生,我学到的一件事是您可以将指针设置为 NULL。我的问题是,这两种说法有什么区别?他们每个人什么时候返回真/假?

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

谢谢!

【问题讨论】:

    标签: c++ pointers null dereference boolean-expression


    【解决方案1】:

    第一个将变量的地址与 null 进行比较,第二个取消对指针的引用,获取它保存的值并将其与 null 进行比较。

    【讨论】:

    • 什么变量的地址?没有变量有空地址。
    【解决方案2】:

    第一个语句是指针 some_ptr 指向的实际地址。如果为 NULL(定义为 NULL 所代表的值),则为真,否则为非。

    后面的语句是指指针指向的地址的内容。因此,如果您让 some_ptr 指向一个整数,并且该整数恰好与您的空定义相同,则第二个条件的计算结果为真。

    【讨论】:

      【解决方案3】:

      首先是将指针本身与 NULL 进行比较,这似乎是可取的。

      第二个是您首先取消引用指针以获取然后与 NULL 进行比较的值,就像您根据变量名将 int 值与 0 进行比较。

      【讨论】:

        【解决方案4】:

        第一个说:
        some_ptr 是否为空?

        第二个说:
        some_ptr 指向什么 NULL?

        【讨论】:

          【解决方案5】:

          例如:int* x;在这里,如果您喜欢检查 x 是否指向 NULL,那么我们使用第一条语句。使用相同的 int* x,如果您使用第二条语句,那么您将尝试取消引用指针并检查 x 指向的值。因为 NULL 在 C 中为 0,所以 C++ 会检查 x 指向的值 0。

          编辑:同样在第二条语句中,如果 x 指向 NULL,则延迟 NULL 指针会导致 UNIX 上的核心下降。

          【讨论】:

            猜你喜欢
            • 2010-11-03
            • 2020-01-22
            • 1970-01-01
            • 2012-05-25
            • 2014-07-16
            相关资源
            最近更新 更多