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 &amp;&amp; *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 样式字符串的第一个元素的指针)的主要内容,如果未能解决你的问题,请参考以下文章

c语言*p++是啥意思?

c语言&*p 是啥

free(p),是啥意思?是单纯p==NULL还是说p指向的内容变为空。使用free()之后 p和内存的状态是啥情况的

*a=p和*a=&p的区别是啥呀 *a=p是否相当于a=&p

C语言二维数组指针变量是啥,int (*p)[2]啥意思

这个类型结构定义的指针是啥意思(在C中)?