| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 899 人关注过本帖
标题:指针问题+函数
只看楼主 加入收藏
语言呆子
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2009-4-12
结帖率:83.33%
收藏
 问题点数:0 回复次数:15 
指针问题+函数
int fun(char *p)
{
  char *t=p;
  while(*t++);
  return(t-p-1);
}
main()
{
printf("%d",fun("abc"));
getch();
}

答案是3,怎么会是3,百思不解,请各位大侠帮帮忙了,急呀
搜索更多相关主题的帖子: 函数 指针 
2009-10-09 17:06
xxcc309
Rank: 2
等 级:论坛游民
威 望:1
帖 子:63
专家分:82
注 册:2007-6-25
收藏
得分:0 
你可以看fun(char *p) 中的
return中的值,t-p需要解释下
可以理解成t指针相对p指针移动的次数,这样你应该可以理解了吧。

努力决定一切 奋斗才是命运
2009-10-09 17:17
ian116
Rank: 1
等 级:新手上路
帖 子:28
专家分:2
注 册:2009-5-15
收藏
得分:0 
好混乱的感觉啊。反正我是看不懂你的结构,while(*t++);  这是什么?什么时候截止?另外如果你用的是*t++,那不是指针往后指一位,而是指针说指的值+1,也就是说你一直在做1+1+1的加法。虽然不知道你loop到什么时候,但是,结果是数字,不算奇怪。
2009-10-09 17:18
lansong
Rank: 4
等 级:业余侠客
帖 子:79
专家分:226
注 册:2009-6-11
收藏
得分:0 
int fun(char *p) //假设p=0;
{
  char *t=p; //t=p,即t=0;
  while(*t++); //直到*t=0结束,这句循环后,4;
  return(t-p-1); //4-0-1=3
}
main()
{
printf("%d",fun("abc")); //把字符串"abc"的首地址传给fun中的p
getch();
}
2009-10-09 17:20
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
如楼上所说。这个是死循环。
int fun(char *p)
{
  char *t=p;  //t指向abc的地址
  while(*t++); //所以*t这里第一次时指的是a ,a++....这个不知要到那时才会0?,不为0的值都while不会退吧?
  return(t-p-1);
}
main()
{
printf("%d",fun("abc"));
getch();
}
2009-10-09 17:25
xxcc309
Rank: 2
等 级:论坛游民
威 望:1
帖 子:63
专家分:82
注 册:2007-6-25
收藏
得分:0 
回复 5楼 onepc
字符串都是以'\0'结尾的吧,当循环到‘\0’while循环就结束了。

努力决定一切 奋斗才是命运
2009-10-09 17:37
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
注意。这个是 while(*t++); 不是t++   .这个怎么会移动呢??
2009-10-09 17:41
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
或者是++的优先级大于*..这个要去查下才知。
2009-10-09 17:46
ian116
Rank: 1
等 级:新手上路
帖 子:28
专家分:2
注 册:2009-5-15
收藏
得分:0 
关键是不知道lz什么意思。要值+1,也没见过*t++的,如果要指针移动应该是*(t++)
2009-10-09 17:49
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
比较简单:
++的优先级比*高,那么首先t指针+1,再算*t,由于是t++,所以*t开始值是 a,为真,
接着循环,分别为 b,c和'\0',而'\0'就是0,循环停止,此时t为'\0'字符位置+1,那么t=p+4
那么return t-p-1就是3.


要练习算法就来http:///!!有挑战哦!!
2009-10-09 19:43
快速回复:指针问题+函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016398 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved