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

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

結果為什么會出錯?#include<iostream.h>

結果為什么會出錯?#include<iostream.h>

慕運維8079593 2021-12-08 23:19:48
#include<iostream.h>void print(int *x,int *y,int *z){ cout<<++*x<<','<<++*y<<','<<*(z++)<<endl;}void main(){int a=1,c=2,b=4;print(&a,&b,&c);print(&a,&b,&c);}
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

以上的程序和你的代碼完全等價,設置四個斷點并調試,我稱前三個斷點為1,2,3,如圖。


print函數接受三個參數,三個整形指針。在print(&a,&b,&c)這句話中分別傳入了a,b,c變量的地址,也就是指向a,b,c三個整型變量的指針。


進而在print函數當中

第一個斷點: cout << ++*x<<',';  這句話中 ++*x 的優先級是 * 高于 ++ 也就是 ++(*x)

那么,x所指的變量自增,所以x所指的變量變成了2。由于傳入的是指針,那么內存當中的數值也就變了,也就是說,main函數中a的值已經變為了2.

第二個斷點 cout << ++*y<<','; 這句話與第一個類似,不解釋了

第三個斷點 cout << *(z++)<<endl; 

這句話得好好說說

這句話的意思是 先將指針z所指的變量取出并打印到屏幕上,然后再對z進行自增。注意:此處z++,++自增符號在z的后方,說明是先取出z之后再對其進行自增操作。不要被括號所蒙蔽,認為是先自增之后再取出變量了。而由于指針z的自增對z所指的變量沒有任何影響,所以c的值還是2,并沒有任何變化,不像a和b,他們的值已經發生了變化。


我已經完整解釋了第一個print函數的過程,你應該也明白第二個print了吧

下面是整個的圖,給你貼出來




查看完整回答
反對 回復 2021-12-12
  • 1 回答
  • 0 關注
  • 468 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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