c语言指针,下面这题看不懂,求解😭

#include<stdio.h>intfun(char*x){char*y=x;while(*y++);return(y-x-1);}voidmain(){chara[... #include<stdio.h>
int fun(char *x)
{
char *y=x;
while(*y++);
return(y-x-1);
}
void main()
{
char a[]={"hello"};
printf("%d",fun(a));
}
while(*y++);是什么意思啊
return(y-x-1);又是什么意思
展开
 我来答
上海长英
2021-02-18 · 上海长英,自动化电气设计,软件编程。
上海长英
采纳数:1072 获赞数:22870

向TA提问 私信TA
展开全部
  1. while (*y++)

    因为++运算符优先级比*高,所以先对指针y加1,再取出指针y指向的 字符

    如果取出的字符不为0(\0) 就循环

    因为字符串数组 a[]={hello} 是依字符'\0'结尾,字符'\0'的ASCII 码值 是0

    这样当指针y 指向'\0'时 就结束循环。

  2. return (y-x-1)

    y x 都是指针,是内存地址,y-x-1 就两个指针相减再减1 ,返回运算结果。

  3. 从实际执行结果看 返回的是5

    这样y-x=6

    其实实际循环了5次,但是y 和 x 两个指针却相差6

    是因为++的优先级比*高导致的。

  4. 希望我的回答对你有点帮助,很高兴和你一起讨论和学习C语言。

    C语言的指针是比较难理解的知识点,需要多练习才能掌握。 

KlarkKenter
2021-02-18 · TA获得超过1681个赞
知道小有建树答主
回答量:1540
采纳率:0%
帮助的人:355万
展开全部

首先a[]中存储是这样的。

while(*y++);

这个是指针遍历整个字符串数组,直至'\0'结束,结束时多进行了一次++所以后面要-1。

return(y-x-1);

前面循环完成后y是x字符串的下个地址,相减再-1即是字符串长度,如图:

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9e20a17
2021-02-18 · TA获得超过259个赞
知道答主
回答量:145
采纳率:42%
帮助的人:15.4万
展开全部
C语言函数里面的指针。你这种情况就可以暂时理解成,在main函数里传走的参数是具体的,在你写的函数里面发生了修改,所以说在main函数在得到的数据中也是被修改后的数据。如果没有把指针带走的话,就好像两个小孩抄作业,不论抄作业的小孩是怎么抄的,被抄作业的那个人作业的内容是不变的。但是带指针的话,就好像别人抄他作业的时候直接写在他的作业本上了。抄作业的那个同学没有自己的作业本用的是别人的作业本。我这么说可以吗?好像也不太清楚,如果你还有其他疑问的话,可以继续追问
更多追问追答
追问
while(*y++);是什么意思啊
一直往下一个元素指下去吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄雨晖1996
2021-02-18 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:493
采纳率:0%
帮助的人:27.4万
展开全部
*y是指针,
所以while(*y++)是找串尾符
returen()是函数的返回值,也就是说你建的这个fun()运行完数值就等于这个返回值
总的来说,是一个计算长度的程序,可以寻味一下return(y-x-1)里面的-1是怎么来的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2021-02-18 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
#include<stdio.h>
int fun(char *x)
{
char *y=x;
while(*y++); //指针不断后移,直到遇到串尾符为止(后自增,指针停在串尾符的后面一位)
return(y-x-1); //返回字符串的长度("ABCD"的长度为4)
}
void main()
{
char a[]={"hello"};
printf("%d",fun(a)); //输出5
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式