
求字符串长度的函数
#include"stdio.h"intfun(char*x){char*y=x;while(*y++){};returny-x-1;}voidmain(){char*p...
#include "stdio.h"
int fun(char *x)
{
char *y=x;
while(*y++){};
return y-x-1;
}
void main()
{
char *p ="abcde";
printf("%d\n",fun(p));
}
为什么返回 y-x-1;而不是y-x?
是先*y 在y++
还是先y++ 再*y 展开
int fun(char *x)
{
char *y=x;
while(*y++){};
return y-x-1;
}
void main()
{
char *p ="abcde";
printf("%d\n",fun(p));
}
为什么返回 y-x-1;而不是y-x?
是先*y 在y++
还是先y++ 再*y 展开
5个回答
展开全部
C 的字符串都有一个结尾,就是 '\0' ,
你题目中的指针的初始值是 "abcde" ,
在p中存放的数据就是 "abcde\0",其实是6个字符,
你的while(*y++)操作在没有遇到最后的 '\0'时一直在累加,
而计算到'\0'后才能执行后的return y - x - 1,
这个时候就多计算了一个'\0'这个字符,
所以在最后要减去多算的这个字符,也就是减去 1
你题目中的指针的初始值是 "abcde" ,
在p中存放的数据就是 "abcde\0",其实是6个字符,
你的while(*y++)操作在没有遇到最后的 '\0'时一直在累加,
而计算到'\0'后才能执行后的return y - x - 1,
这个时候就多计算了一个'\0'这个字符,
所以在最后要减去多算的这个字符,也就是减去 1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(*y++)的意思是
先判断*y是否为0
如果是,那么y=y+1结束循环
如果不是,y=y+1继续循环。
所以,在最后结束循环的时候y指针是没有指到字符串的结束符号'\0',而是指到了他后面的一个位置,需要把这个多余的位置减掉。
先判断*y是否为0
如果是,那么y=y+1结束循环
如果不是,y=y+1继续循环。
所以,在最后结束循环的时候y指针是没有指到字符串的结束符号'\0',而是指到了他后面的一个位置,需要把这个多余的位置减掉。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为这里是Y++,不是++Y,实际上每次判断的是Y,但是判断过后就Y自增了一个,当你判断Y=0(就是字符串结束标志/0)过后,Y还自增了一个,也就是说现在在你的程序里面,Y已经是7了,本来应该是6个长度,
多仪要减1
多仪要减1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量Y一直在做++操作,一开始的时候*Y=X,但在最后一次Y++,是空,while跳出,这个++操作是不和题意的,所以要减掉最后一次++
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询