首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解带有指针的字符串

如何理解带有指针的字符串
EN

Stack Overflow用户
提问于 2019-12-25 03:10:27
回答 2查看 75关注 0票数 2

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

代码语言:javascript
复制
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)在做什么。

EN

回答 2

Stack Overflow用户

发布于 2019-12-25 03:35:40

代码中的变量p被定义为指向char的指针。要获取p所指向的实际char值,您需要使用*操作符取消对指针的引用。

因此,您的while循环中的表达式,*p在每个循环的开头计算为char变量,p当前指向的变量。在循环中,putchar调用也使用这个解引用操作符,但随后会递增指针的值,因此,在将该字符发送到输出后,指针会递增( ++操作符),然后指向字符串中的下一个字符。

传统上(实际上,几乎总是如此),C中的字符串是NUL-terminated,这意味着字符串的结束是通过在字符串的末尾有一个值为零的字符来表示的。

当代码中的while循环到达这个NUL终止符时,表达式*p的值将为零。而且,由于零相当于C中的逻辑“假”(任何非零值都被认为是“真”),所以while循环将结束。

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

票数 2
EN

Stack Overflow用户

发布于 2019-12-25 03:38:47

来自C标准(6.8.5迭代语句)

4迭代语句导致称为循环体的语句重复执行,直到控制表达式比较等于0为止。

在程序的这一部分

代码语言:javascript
复制
p = *ptr;
while(*p)
//…

指针p指向当前字符串的第一个字符。C中的字符串是以零字符'\0'结尾的字符序列。

例如,指针最初指向字符串"ola"的第一个字符。字符串在相应的字符数组中表示,如下所示

代码语言:javascript
复制
{ 'o', 'l', 'a', '\0' }

循环中的条件

代码语言:javascript
复制
while(*p)

可以重写为

代码语言:javascript
复制
while(*p != 0 )

因此,将对字符串中除最后一个以零结尾的字符之外的所有字符执行循环,并输出字符串的前三个字符。

注意这一点(6.5.9相等运算符)

3 == (等于)和!= (不等于)运算符类似于关系运算符,只是它们的优先级较低。108)如果指定的关系为真,则每个运算符产生1,如果它为假,则产生0。结果为fi类型。对于任何一对操作数,只有一个关系是真的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59472660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档