精通c語言的親們,為什麼地址交換了,而值卻沒改變呢

2021-05-04 18:29:03 字數 971 閱讀 4795

1樓:倫悅宜

如果假設親和女朋友旅遊住酒店,但不能住一起,你住酒店的801房間;而她住802,這時酒店的管理人員發現房間編號有問題,於是把你和她的房間號碼換了,就是原來的801改為802,而原來的802改為801,這時雖然號變了,但內容(你和她)缺沒變。

對應到c當中,801和802就是所謂的指標,而內容就是你和她。

2樓:高山來逛逛

修改下函式定義部分

void swap(int *&a, int *&b)要改為引用.

具體請翻閱下

3樓:匿名使用者

你沒有明白子函式的引數是怎麼實現的

除了用&宣告實參和形參公用一個記憶體空間外

其他的形式的函式,函式呼叫的時候是要另外申請記憶體空間的,也就是說是一個影子

他們不再一個記憶體空間中,那麼函式改變了這個記憶體空間的記憶體,是不會改變主函式中變數佔用的記憶體的內容的,真是很多新手在函式呼叫時遇到的困惑

用你的例子。我形象一下給你說明

假如啊i佔用記憶體地址為0001 j為00020001內容為3,0002內容為5

p佔用記憶體地址為0003 q0004

0003內容為0001,0004內容為0002這個你應該能明白,理解吧

那麼呼叫函式的時候

a佔用0005,b0006

0005內容為0001,0006內容為0002這樣應該理解吧

那麼執行函式後,0005內容改為0002,0006內容改為0001這樣明白吧

接下來就是結果了,你改變了0005和0006的內容,但是列印的是0003和0004的內容

那麼當然還是不變了,你說是不是啊

指標改變的道理是

void swap(int *a,int *b)這裡的解釋就是

*a的內容是3,*b的內容是5

那麼交換指標指向的記憶體的內容的話,3 5就交換了

求C語言大神解答,為什麼地址P變化如何計算,P變化為什麼會導致a隨之變化。圖中第二題

p 是先使用 p的值 p等價於a 再使 p p 1 因此改變了a的值 求助c語言大神。指標問題。如果 p a,p 和 p 怎麼計算,表示什麼啊?不懂啊?p a是錯誤的,只能是int p a才對,是int的不是p的,p意思是 取p指向的值 如果a 3,那麼 p 的值3,然後p p 1。p 的效果與 p...

c語言,c的值為什麼不是,c語言,c的值為什麼不是

c a a a b,b 4 這句反彙編後的內容如下,下面是分析,望採納 0040103d mov eax,dword ptr ebp 4 可見ebp 4的地方儲存a的值,這條指令將 a 的值放到暫存器eax中 00401040 add eax,1 eax值加1,也就是a a 1 00401043 m...

C語言寫函式交換兩個數的值,為什麼一定要用指標

運用 解釋指標運用的理解如下 include using namespace std int fun1 int a,int b int c c a a b b c cout a1 int c c a a b b c cout a2 a b2 b int c c a a b b c cout a3 a...