鱼C论坛

 找回密码
 立即注册
查看: 1779|回复: 4

[已解决]关于return语句的问题

[复制链接]
发表于 2022-9-17 23:17:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  2. int fun(char *x)
  3. {
  4.   char *y = x;
  5.   while (*y++)
  6.   {
  7.   };
  8.   return (y - x - 1);
  9. }
  10. int main(void)
  11. {
  12.   char a[] = {"Hello"};
  13.   printf("%d", fun(a));
  14.   return 0;
  15. }
复制代码
最佳答案
2022-9-17 23:27:42
我们知道,在C语言中,字符串以'\0'为结束符,而'\0'就是0
所以这个代码中让y++,然后用*取值,取到'\0'就会跳出while循环(这里先做y++)
y是字符串'\0'的位置,而x是字符串的开始位置,所以y-x-1就是字符串的长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-17 23:27:42 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币

我们知道,在C语言中,字符串以'\0'为结束符,而'\0'就是0
所以这个代码中让y++,然后用*取值,取到'\0'就会跳出while循环(这里先做y++)
y是字符串'\0'的位置,而x是字符串的开始位置,所以y-x-1就是字符串的长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-17 23:30:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-17 23:37:46 | 显示全部楼层

回帖奖励 +2 鱼币

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

一楼+1,,  不过y++应该是先用后加,也就是先*y再偏移指针。while(*y++)即便是while(*(y++))也是先给y取值再给y加加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-18 00:33:53 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表