| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 899 人关注过本帖
标题:指针问题+函数
只看楼主 加入收藏
tianyanna
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-9
收藏
得分:0 
while(*t++),++优先级高于*,但++在后,因此是使用完t后再++。*t先指向变量取值,之后指针t后移。fun函数计算的就是t相对于p的位移,结果肯定是3了。
2009-10-09 21:38
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
经查资料得,++和*优先级相同,之所以先算++再算*是因为同类优先级的结合性是自右向左,楼主的结束条件应该是当值为字符串结束标记就跳过循环

我可好玩啦...不信你玩玩^_^
2009-10-10 06:46
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
*t++    先取*t值,  t再向后指一位。
这个加些测试代码,上机测试就知道过程。
·
程序代码:
# include <stdio.h> 
int fun(char *p) 
{ 
  char *t=p; 
  printf("t=%#x\n",t); 
 
  while(putch(*t++)) 
      printf("    t=%#x *t=%c\n",t,*t); 
 
  printf("t=%#x\n\n",t); 
  return(t-p-1); 
} 
main() 
{ 
printf("%d\n\n",fun("abc")); 
getch(); 
} 
输出结果:
t=0x1b9 (地址的十六进字值,不同的机器上值也会不同)
a    t=0x1ba *t=b    (当运行到while判断是否符合条件时,输出:a ,t再向后指一位,进到循环里,t是指向'b')
b    t=0x1bb *t=c
c    t=0x1bc *t=         (这里*t值为'\0',显示个空格)
t=0x1bd   (最后t的指向)

[ 本帖最后由 UserYuH 于 2009-10-10 09:39 编辑 ]

努力—前进—变老—退休—入土
2009-10-10 09:20
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
有没有觉得这里有些连语法都搞不清楚的guys?不过还好,搞不懂可以慢慢学,最怕(有意或者无意地)不懂装懂。遇到自己拿不定的问题,翻完了书本再说会比较好……

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-10-10 09:55
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
嗯,多上机实践,对不知道结果怎么来的要对代码逐步跟踪,多调试,养成良好习惯,能提高自身查错能力。(个人意见)

努力—前进—变老—退休—入土
2009-10-10 11:01
大城小事
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-10
收藏
得分:0 
'a','b','c',0,x...(x代表0后面的一个字节)
字符串在内存中大致如上,
开始时t,p均指向'a',然后开始执行while(*t++);
关键问题就是,当t指向0,先判断了*t为0,然后又执行了t++,
于是,t指向了x,而p指向'a',
因此,t-p-1是3
2009-10-10 12:27
快速回复:指针问题+函数
数据加载中...
 
   



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

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