当前位置: 代码迷 >> C语言 >> [讨论]弄不懂的程序!!!!看看!
  详细解决方案

[讨论]弄不懂的程序!!!!看看!

热度:267   发布时间:2005-01-06 08:44:00.0
[讨论]弄不懂的程序!!!!看看!
int ast(int x,int y,int *cp,int *dp)
{*cp=x+y;
*dp=x-y;
}
main()
{int a,b,c,d;
a=3;
b=4;
ast(a,b,&c,&d);
printf("%d%d\n",c,d);
getch();
}
为何运行的结果是7-1,而不是71,真的不明白, A与B的值是何时互换的,请教高手!
搜索更多相关的解决方案: 弄不懂  

----------------解决方案--------------------------------------------------------
3-4 不是-1么????
----------------解决方案--------------------------------------------------------
传地址嘛,当然会改变c,d的值了
----------------解决方案--------------------------------------------------------
谢了
----------------解决方案--------------------------------------------------------
哪里是什么传地址?! 谁传给谁?cp传给c?dp传给d?cp dp是形参本身怎么会有值?在MAIN()调用他的函数后,a b 完全取代了x y. &c &d完全取代了cp dp,从而被赋予3+4,3-4.来自a b的值.哪里是c,d的值改变了?!
关键是 *&c=c.(&,*实际上不是普通的符号而都是运算符,&c,取c地址, *addr,指向addr地址的内存空间,就可以寸取了,*&c就是先取c地址<在前面被定义了变量,系统就分配地址了,比如在177734内存处>,然后再指向自己的内存空间<177734>,也就是c自己.接着c=3+4,就是把7赋给c,也就是把7写到177734内存处).
够清楚了吧.

这个小程序就是看有没有掌握两个关键知识点:
1,形参和实参的关系(被取代和取代)
2, * & 两符号的关系.(指向和指针(指针就是地址))


[此贴子已经被作者于2005-1-7 13:18:48编辑过]



----------------解决方案--------------------------------------------------------
楼上的说错了吧!a和b是传递的值不是地址,而c和d才是传递的地址,所以c和d的值才会改变!晕! int ast(int x,int y,int *cp,int *dp) {*cp=x+y; *dp=x-y; } main() {int a,b,c,d; a=3; b=4; ast(a,b,&c,&d);//运行后a,b的值不变,c变为i7,d变为-1所以输出才是7-1注意是输出7然后再输出-1由于中间没有空格所以看上去就是7-1呵呵!好久没来了想念这里啊!不知道怎么我的版主位置怎么没了! printf("%d%d\n",c,d); getch(); }
----------------解决方案--------------------------------------------------------
楼上的,并不是"c和d才是传递的地址,所以c和d的值才会改变!" c d 不是地址,只是普通变量,他们的值通过调用函数第一次也是最后一次被分别赋值3+4和3-4(来自a b)后,没有任何改变! 建议看一下我上面的小帖...写的很细,,

[此贴子已经被作者于2005-1-7 13:17:24编辑过]


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
  相关解决方案