【问题标题】: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,其中任何一个将终止循环。

标签: c++ pointers character


【解决方案1】:

检查指针本身不为空 - 如果在函数中使用并且 p 是参数,这可能很有用。

在这个例子中它是无用的,因为 p 永远不能为空。

【讨论】:

    【解决方案2】:

    while (p) 部分确保p 的值非零,while (*p) 检查以确保p 的取消引用值非零。

    因此,如果字符串本身(指向它的指针)p 不为零,并且它的当前字符*p 不是'\0',则将执行while 循环块。

    【讨论】:

    • 字符串本身(指向它的指针)p 是否可能为零?我想 while(p) 可能没有任何意义。
    • 在这种情况下,使用您的代码,没有。从“while”语句中删除它是安全的。
    • 你的意思是,while(p) 可能在其他一些场景中有它的实际用途,对吧?
    • 嗯,稍微。即使在其他情况下它是一个非零值,该字符串也可能指向一些受限制、不可访问或已被释放的内存。只有当你不能检查原来的指针,必须创建一个新的指针来检查它是否为零时,才一定不推荐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2019-12-17
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多