【发布时间】: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,其中任何一个将终止循环。