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