首页 > 解决方案 > 如何用指针理解字符串

问题描述

过去几个月我一直在学习 C 语言。我正在使用一本书,我有这个练习:

char vector[N_STRINGS][20] = {"ola", "antonio", "susana"};
char (*ptr)[20] = vector;
char *p;

while(ptr-vector<N_STRINGS)
{
    p = *ptr;
    while(*p)
        putchar(*p++);
    putchar('\n');
    ptr++;
}

我明白一切期待了while(*p)!我无法弄清楚它在while(*p)做什么。

标签: cloopspointerswhile-loopc-strings

解决方案


代码中的变量p定义为指向char. 获取指向的实际 charp,您需要使用运算符取消引用指针*

因此,循环中的表达式在while每个*p循环开始时计算当前指向char变量。在循环内部,调用也使用此取消引用运算符,但随后会递增指针的值,因此,在将该字符发送到输出后,指针会递增(运算符),然后指向字符串中的下一个字符。pputchar++

按照惯例(事实上,几乎总是),in 中的字符串CNUL- 终止的,这意味着字符串的结尾是通过在字符串末尾有一个值为 0 的字符来表示的。

while您的代码中的循环到达此NUL终止符时,表达式的值*p将因此为零。并且,由于 ZERO 等价于逻辑“假” C(任何非零值都被视为“真”),while循环将结束。

随时要求进一步澄清和/或解释。


推荐阅读