| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1424 人关注过本帖
标题:这次传的应该是地址了吧?怎么还是没返回值呢?
只看楼主 加入收藏
aaaasix
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-10
收藏
 问题点数:0 回复次数:18 
这次传的应该是地址了吧?怎么还是没返回值呢?
point(char*p){p+=3;}
main()
{ char*b[4]={'a','b','c','d'},*p=b;
point(p);
printf("%c\n",*p);
}

俺怎么看都觉得应该输出一个D呀,可它就偏偏输出一个A,
这家比俺还倔~~~~~~~
同志们辛苦讲解一下!谢谢!
知道这里的人都热心,好幸福哟~~~~~~
搜索更多相关主题的帖子: 返回值 地址 char point main 
2007-07-04 00:16
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
int point(char*p)
{
*p+=3;
}

int main()
{
char b[4]={'a','b','c','d'};
char *p=b;

point(p);
printf("%c\n",*p);
}

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-04 09:30
talentzhu
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-5-12
收藏
得分:0 

int point(char*p)
{
*p+=3; //搂主要的是地址加3,这怎么变成值加3了?
}

int main()
{
char b[4]={'a','b','c','d'};
char *p=b; //指针可以直接被赋予数组的值吗?

point(p);
printf("%c\n",*p);
}

2007-07-06 20:42
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 

人家2楼是对的。
*p+=3;是p先往后移三个元素,在取其值返回。
char *p=b;这是指上数组第一个元素的指针,怎么不行呢?


深山苦学C语言,终年不见外面世界。
2007-07-06 21:18
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 

可怜的人啊。
我就说一句,C语言的函数都是传值的。

2007-07-06 21:45
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
char*b[4]={'a','b','c','d'}请问这个对吗?b[]应该是个指针,怎么能够存放一个普通字符常量呢?
main()
{ char*b[4]={'a','b','c','d'},*p=b;
p=p+6;/*对地址修改*/
printf("%c\n",*p);
}


偶是菜鸟鸟偶惧WHO?!!!!
2007-07-07 09:44
talentzhu
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-5-12
收藏
得分:0 
如果b[4]={'a','b','c','e'}那么*P+=3取的是d还是e,p+=3是e吧?
2007-07-07 12:49
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

汗一个先,先说2楼的程序,两个函数都是int的没有返回值,

如果如三楼所说,楼主需要的是地址加3,那么4楼就错了,*p+=3; 就是*p值加3

所以说,二楼的程序,最后b数组变成{'d','b','c','d'}, 所以最后会输出'd',

再说5楼,你说了一句很经典的话,其实只要把传任何东西都看成传值就好了

如果楼主是想地址+3,即使p指向b[3]的话,在2楼的基础上这样改就可以了。


void point(char**p) //用指向指针的指针
{
*p+=3; //*p还是一个指针,所以是指针+3,最后*p指向b[3]
}

int main()
{
char b[4]={'a','b','c','d'};
char *p=b;

point(&p);
printf("%c\n",*p);
printf("%c\n",b[0]);//b[0] = 'a' ,没有改变

return 0;
}


回6楼,你要知道[]比*的优先级高
回7楼,*P+=3 是值+,所以是d,p+3是地址+,所以是'e'.

[此贴子已经被作者于2007-7-7 13:18:57编辑过]


天行健,君子以自强不息!!QQ:68660681
2007-07-07 13:17
saiya_ma
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-4-10
收藏
得分:0 
以下是引用leeco在2007-7-6 21:45:03的发言:

可怜的人啊。
我就说一句,C语言的函数都是传值的。

说的相当好!
子函数的指针p和主函数的指针p是不一样的,子函数改变了指针的指向,但是主函数中的p还是指向数组的首地址

2007-07-07 13:18
cihren
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-6-27
收藏
得分:0 
顶8楼

革命尚未成功,同志仍需努力!
2007-07-07 15:41
快速回复:这次传的应该是地址了吧?怎么还是没返回值呢?
数据加载中...
 
   



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

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