| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 647 人关注过本帖
标题:再看看下边程序
只看楼主 加入收藏
plane5530
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-1-19
结帖率:83.33%
收藏
 问题点数:0 回复次数:8 
再看看下边程序

#include "stdio.h"
f(char *s)
{char *p=s;
while ( *p!='\0') p++;
return (p-s);
}
main()
{
printf("result:%d\n",f("GHEDG"));
}

答案为什么会是5呢?程序是怎么运行的啊?有请网友帮助并详细给解释下。

搜索更多相关主题的帖子: char result main GHEDG 
2007-03-15 13:18
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
因为有5个字母嘛。。。

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2007-03-15 13:21
plane5530
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-1-19
收藏
得分:0 
return(p-s)怎么运算的?
2007-03-15 13:27
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
f("GHEDG")在调用的时候会将"CHEDG"的首地址传过去,假如为2000,在F函数中P首先的值也是2000,然后循环,P开始自加.由于系统会自动在"CHEDG"后加一个"\0"字符,所以当遇到这个时就会终止,此时P的值已经增加了5了,就是2005,返回的时候就会是5.

雁无留踪之意,水无取影之心
2007-03-15 13:28
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
让另一个人来帮你解释哈。你=着。

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2007-03-15 13:30
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
用字符串的尾地址减首地址,由于每个字符只占一个字节,所以是5.

倚天照海花无数,流水高山心自知。
2007-03-15 13:46
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
真的有人来,5楼的真灵

雁无留踪之意,水无取影之心
2007-03-15 13:50
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以下是引用nuciewth在2007-3-15 13:46:10的发言:
用字符串的尾地址减首地址,由于每个字符只占一个字节,所以是5.

并不是你所说的那样,因为p++ 自加的是一个相对的值,
而p-s 不是纯地址的相减,而是一个相对的位置相减,
如果把上述的char 改为int 型还是一样的结果.

举一个例子.
#include <stdio.h>
#include <conio.h>
int fun(int *string)
{
int *p=string;
while(*p!=1)
p++;
return (p-string);
}
main()
{
int string[5]={5,4,3,2,1};
clrscr();
printf("%d",fun(string));
getch();
}


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-15 14:27
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
对.楼上正确,我以前还没注意这个问题.

雁无留踪之意,水无取影之心
2007-03-15 14:35
快速回复:再看看下边程序
数据加载中...
 
   



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

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