亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問以下程序的結果是什么呢? 有知道的嗎?

請問以下程序的結果是什么呢? 有知道的嗎?

守候你守候我 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 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號