我刚刚开始学习C ++,并在C ++ Primer中遇到了两个练习。我无法理解这个练习中的一个。
练习2.22 C ++入门
假设p
是指向int
的指针,请解释以下代码:
if (p) //....
if (*p) //....
正如我在1个语句中所理解的那样,我们检查指针p的条件是true
还是false
在2语句中,除了这次我们使用解引用运算符
之外,所有动作都是相同的
如果我错了,你能告诉我我的错误吗?
下一个练习,这个练习我无法理解
练习2.23
给定指针p
,您可以确定p
是否指向有效对象?如果是这样,怎么样?如果没有,为什么不呢?
我知道的是,当您的变量初始化并且与指针具有相同的类型时,您可能知道您的指针指向有效对象。并且尝试访问无效指针可能会导致代码问题,并且编译器蚂蚁会发现此问题 还有其他关于此练习的内容可以添加吗?或者我的猜测是错的? 谢谢你的时间!
答案 0 :(得分:1)
假设
int *p = NULL;
然后:
if (p)
检查p是否为NULL并返回false。
if (*p)
检查(*p) == 0
,即p
指向的整数是否为0。
如果你有
int *p;
即没有初始化,那么p
会指向你记忆中的随机地址,
if (p)
大部分时间都会返回true。和
if (*p)
会给出未定义的行为。