while(p) 是啥意思? (p 是指向 C 样式字符串的第一个元素的指针)
Posted
技术标签:
【中文标题】while(p) 是啥意思? (p 是指向 C 样式字符串的第一个元素的指针)【英文标题】:What does while(p) mean? (p is a pointer to the first element of a C style string)while(p) 是什么意思? (p 是指向 C 样式字符串的第一个元素的指针) 【发布时间】:2020-03-24 05:45:27 【问题描述】:#include <iostream>
int main(void)
char* c = "Hello World!";
char* p = c;
while (p && *p)
std::cout << *p << std::endl;
++p;
return 0;
看上面。
这是一个 C++ 练习中的简短代码示例。
我能理解while(*p),意思是循环直到到达最后一个字符('\0')。
但我听不懂while(p)。
while(p) 是什么意思? (p 是指向 C 样式字符串的第一个元素的指针)
【问题讨论】:
每个 C 字符串以什么结尾? (回答一个nul-character,例如'\0'
,它具有十进制值0
)。因此,当您测试while (p && *p)
时,您首先测试p != NULL
,然后再测试*p != '\0'
。这允许您验证原始指针不是以 NULL
开头,然后遍历每个字符,直到当前字符是标记字符串结尾的 nul-character,其中任何一个将终止循环。
【参考方案1】:
检查指针本身不为空 - 如果在函数中使用并且 p 是参数,这可能很有用。
在这个例子中它是无用的,因为 p 永远不能为空。
【讨论】:
【参考方案2】:while (p)
部分确保p
的值非零,while (*p)
检查以确保p
的取消引用值非零。
因此,如果字符串本身(指向它的指针)p
不为零,并且它的当前字符*p
不是'\0'
,则将执行while
循环块。
【讨论】:
字符串本身(指向它的指针)p 是否可能为零?我想 while(p) 可能没有任何意义。 在这种情况下,使用您的代码,没有。从“while”语句中删除它是安全的。 你的意思是,while(p) 可能在其他一些场景中有它的实际用途,对吧? 嗯,稍微。即使在其他情况下它是一个非零值,该字符串也可能指向一些受限制、不可访问或已被释放的内存。只有当你不能检查原来的指针,必须创建一个新的指针来检查它是否为零时,才一定不推荐。以上是关于while(p) 是啥意思? (p 是指向 C 样式字符串的第一个元素的指针)的主要内容,如果未能解决你的问题,请参考以下文章
free(p),是啥意思?是单纯p==NULL还是说p指向的内容变为空。使用free()之后 p和内存的状态是啥情况的