这两个陈述之间的区别? - C ++

时间:2010-02-08 02:22:27

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

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

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

谢谢!

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

第一个语句引用some_ptr指向的指针的实际地址。如果它是NULL(由define NULL表示的值),则为true,否则为。

后一种语句引用指针所指向的地址的内容。因此,如果您将some_ptr指向一个整数,并且该整数恰好与您的null定义相同,则第二个条件的计算结果为true。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

第一个说:
some_ptr 是否为空?

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

答案 4 :(得分:0)

例如:int * x;如果你喜欢检查x是否指向NULL,那么我们使用第一个语句。使用相同的int * x,如果使用第二个语句,则尝试取消引用指针并检查x指向的值。因为C中的NULL为0,所以C ++会检查x指向的值0 编辑:同样使用第二个语句,如果x指向NULL,则引用NULL指针会导致UNIX上的核心丢弃。