在c ++中,如果我们将指针值分配给NULL
,为什么 不 ,我们会检查*p!=NULL
而不是p!=NULL
?
我在教程中找到了这段代码。
int *p = NULL;
char *q = NULL;
// ...
if (p!=NULL) cout << *p;
提前致谢
答案 0 :(得分:15)
*
正在做两件事。声明变量时,表示变量是指针。当您使用变量时,它意味着“取消引用”,即取指针所指向的位置的值。两个完全不同的含义。
答案 1 :(得分:11)
因为p
是指针,*p
是它所指向的对象。
答案 2 :(得分:6)
我觉得你很困惑。本教程中的代码是创建指针并将其初始化为NULL
,然后它将测试它是否为NULL
。您之所以不检查是否*p != NULL
是因为它会测试它指向的是NULL
,而不是测试指针本身是否为NULL
。
当然,您可以选择针对您喜欢的任何值测试*p
,前提是它是一个有效的指针......这完全取决于您想要做什么。
修改强>
您没有将NULL
分配给*p
,而是将其分配给p
。声明int *p = NULL;
与写作相同:
int *p;
p = NULL;
int *
是类型。
基本上,当您写下:if(p != NULL)
时,您只是在测试p
是否指向一个地方,以便使用*p
是安全的。
答案 3 :(得分:1)
代码通过语句int *p = NULL
声明一个int指针。请注意,这些陈述是等效的:
int *p = NULL;
int* p = NULL;
这两个都意味着p是指向整数的指针,这进一步意味着p保存整数的地址。因此,当代码稍后检查
时if(p != NULL)
它基本上是检查此指针中包含的地址是否为NULL。我希望它能说清楚。
答案 4 :(得分:0)
因为p
是一个指针;它是一个包含某个对象的内存地址的变量。
代码检查指针是否指向一个对象,如果是,则在屏幕上显示该对象的值。
if (p != NULL) // "if p is pointing to an object then ..."
{
cout << *p; // "show me the value of that object on the screen"
}
p
是对象的地址*p
是对象的值,称为解除引用