【发布时间】:2011-01-14 05:22:07
【问题描述】:
我是一名试图更好地理解指针的编程学生,我学到的一件事是您可以将指针设置为 NULL。我的问题是,这两种说法有什么区别?他们每个人什么时候返回真/假?
if (some_ptr == NULL)
if (*some_ptr == NULL)
谢谢!
【问题讨论】:
标签: c++ pointers null dereference boolean-expression
我是一名试图更好地理解指针的编程学生,我学到的一件事是您可以将指针设置为 NULL。我的问题是,这两种说法有什么区别?他们每个人什么时候返回真/假?
if (some_ptr == NULL)
if (*some_ptr == NULL)
谢谢!
【问题讨论】:
标签: c++ pointers null dereference boolean-expression
第一个将变量的地址与 null 进行比较,第二个取消对指针的引用,获取它保存的值并将其与 null 进行比较。
【讨论】:
第一个语句是指针 some_ptr 指向的实际地址。如果为 NULL(定义为 NULL 所代表的值),则为真,否则为非。
后面的语句是指指针指向的地址的内容。因此,如果您让 some_ptr 指向一个整数,并且该整数恰好与您的空定义相同,则第二个条件的计算结果为真。
【讨论】:
首先是将指针本身与 NULL 进行比较,这似乎是可取的。
第二个是您首先取消引用指针以获取然后与 NULL 进行比较的值,就像您根据变量名将 int 值与 0 进行比较。
【讨论】:
第一个说:
some_ptr 是否为空?
第二个说:
some_ptr 指向什么 NULL?
【讨论】:
例如:int* x;在这里,如果您喜欢检查 x 是否指向 NULL,那么我们使用第一条语句。使用相同的 int* x,如果您使用第二条语句,那么您将尝试取消引用指针并检查 x 指向的值。因为 NULL 在 C 中为 0,所以 C++ 会检查 x 指向的值 0。
编辑:同样在第二条语句中,如果 x 指向 NULL,则延迟 NULL 指针会导致 UNIX 上的核心下降。
【讨论】: