2013-04-09 95 views
0

我刚开始学习C++,并且在C++入门中遇到了2个练习。这个练习中的1个我无法理解。C++入门练习

练习2.22 C++底漆
假设p是一个指向int,解释下面的代码:

if (p) //.... 
if (*p) //.... 

正如我在1个语句理解我们检查指针p的条件是否其truefalse
在2声明中,除了这次我们使用解除引用运算符
以外所有操作都是相同的如果我错了,你能告诉我我的错误在哪里吗?

而且接下来的练习,这个练习我无法理解
练习2.23
鉴于指针p,你能确定是否p指向一个有效的对象?如果是这样,怎么样?如果不是,为什么不呢?

我知道的事情是,当你的变量被初始化并且具有与指针相同的类型时,你可能知道你的指针指向了有效的对象。而且试图访问无效指针可能会导致代码问题,并且编译器蚂蚁会发现此问题。
这个练习还有别的可以补充的吗?或者我的猜测是错误的?
谢谢你的时间!

回答

1

假设

int *p = NULL; 

然后:

if (p) 

检查P是否为NULL与否和将返回false。

if (*p) 

检查是否(*p) == 0,即通过p指向的整数为0或没有。

,如果你有

int *p; 

即没有初始化它,然后p将指向随机地址在你的记忆,并

if (p) 

将大部分时间回归真实的。和

if (*p) 

会给出未定义的行为。

+0

附加一点澄清:通常,指针在它们持有对对象的引用之前被初始化为“NULL”(=='0')。此外,工厂函数(实例化对象)通常在错误上返回NULL,而不是有效的指针。 – 2013-04-09 03:51:15

+0

谢谢。那帮我 – AlexGreat 2013-04-09 03:51:59

+0

@AlexGreat欢迎来到C++ :) – gongzhitaao 2013-04-09 03:57:09