1613551 发表于 2022-9-17 23:17:55

关于return语句的问题

我没能完全看出来这串代码为什么可以算出字符串的长度
while那里加加的优先级是比*的高吗?优先级是从右往左吗?
return语句那里,是两个地址相减吗
#include <stdio.h>

int fun(char *x)
{
char *y = x;
while (*y++)
{
};
return (y - x - 1);
}
int main(void)
{
char a[] = {"Hello"};
printf("%d", fun(a));
return 0;
}

临时号 发表于 2022-9-17 23:27:42

我们知道,在C语言中,字符串以'\0'为结束符,而'\0'就是0
所以这个代码中让y++,然后用*取值,取到'\0'就会跳出while循环(这里先做y++)
y是字符串'\0'的位置,而x是字符串的开始位置,所以y-x-1就是字符串的长度

1613551 发表于 2022-9-17 23:30:56

{:10_250:}

桃花飞舞 发表于 2022-9-17 23:37:46

本帖最后由 桃花飞舞 于 2022-9-17 23:44 编辑

一楼+1,,不过y++应该是先用后加,也就是先*y再偏移指针。while(*y++)即便是while(*(y++))也是先给y取值再给y加加

hornwong 发表于 2022-9-18 00:33:53

{:5_108:}
页: [1]
查看完整版本: 关于return语句的问题