为了账号安全,请及时绑定邮箱和手机立即绑定

请问以下程序的结果是什么呢? 有知道的吗?

请问以下程序的结果是什么呢? 有知道的吗?

守候你守候我 2021-12-31 07:07:42
以下程序的结果? void foo(int*a, int* b) { *a = *a+*b; *b = *a-*b; *a = *a-*b; } void以下程序的结果? void foo(int*a, int* b) { *a = *a+*b; *b = *a-*b; *a = *a-*b; } void main() { int a=1, b=2, c=3; foo(&a,&b); foo(&b,&c); foo(&c,&a); printf("%d, %d, %d", a,b,c); }
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

首先,这题考点是参数传地址的作用,传地址的作用就是在函数内部可更改外部变量的值
所以在第一次调用foo()时,在这个过程中
*a = *a+*b; --> *a=1+2=3; (注意,此时a的值已经改变,下面的语句中a的值已经是3,不在是1)
*b = *a-*b; --> *b=3-2=1;(注意a的值为上个语句中改成的3,b未更改过,为2)
*a = *a-*b; --> *a=3-1=2;(注意此时a的值再次被改变。a,b的值都已更改所以分别是3,2)
故第一次调用完后a=2,b=1,c=3。此时main函数中的abc的值已被改变
在次使用时为改变后的值
其他两次调用同理
还需要注意的是,第二次调用foo的时候,传了实参b,c的地址,此时foo函数形参a就是b,形参b就是c。要一 一对应,总的来说就是看传参的时候看传的是哪个变量,不能仅看foo函数中的变量名

查看完整回答
反对 回复 2022-01-04
?
森林海

TA贡献2011条经验 获得超2个赞

首先应弄清楚,foo()中的a、b不是main()中的a、b,每次调用foo()都是带入2个int类型数据地址,经foo()运算后仍存放在这2个地址内(而不是a、b地址内)返回 第一次调用foo()后,a=3,b=1,c=3(未变) 第二次调用foo()后,a=3(未变),b=3,c=1 第三次调用foo()后,a=1,b=3(未变),c=2

查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号