为什么我在声明中说int * p = NULL,但在测试中p!= NULL,为什么不用* p!= NULL来匹配声明?

时间:2011-03-11 04:35:49

标签: c++ pointers

在c ++中,如果我们将指针值分配给NULL,为什么 ,我们会检查*p!=NULL而不是p!=NULL

我在教程中找到了这段代码。

int *p = NULL;
char *q = NULL;
// ...
if (p!=NULL) cout << *p;

提前致谢

5 个答案:

答案 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是对象的值,称为解除引用