事實上還是滿足的

首先變數pointer_1和pointer_2分別保存了a和b的地址(pointer_1和pointer_2分別指向a和b)

由於指針也是普通的變數,因此傳遞指針的時候傳遞了指針的值(即指針所指向的地址),程序將地址拷貝給函數的參數,完成了參數的傳遞

在調用swap函數的時候,程序將pointer_1和pointer_2這兩個指針所指向的地址,作為參數傳遞給了swap函數

此時swap函數中p1和p2分別指向pointer_1和pointer_2所指向的地址,這時在swap函數中對p1和p2進行操作,就影響了main函數中a和b的值

沒看懂說啥, 是不是在main ()里定義的變數, 是如何被其他函數修改的啊?

程序是先從main開始的, 變數都有自己的作用域, 你在main 中定義的變數是一直存在的,

直到main 運行結束;在swap函數傳入的指針, 實際上是指向main里的一個變數或指針(一個內存區域更好理解);你修改的是指向 main ()里定義的變數, main 結束後, 指向的變數被銷毀! (ps. 能理解就行, 嘴笨不嚴謹)

我來嘗試通俗的解釋一下...

看得懂最好,看不懂就太傷心了...`(*∩_∩*)′

我有一個玻璃匣子,匣子里放著一些東西...匣子被鎖住了只有我能打得開...

現在,我把這個匣子遞給你(main調用swap)你透過這個匣子,可以看到裡面的東西,比如說裡面放著錢吧...但是你看得見摸不著...你把匣子還給我以後,我再給別人,錢還是錢...沒變...

好...我們把這個流程再來一次...

我還是把這個匣子遞給你...但是這一次,匣子里放的不是錢,而是一個保險柜的密碼...然後你通過這個密碼,打開了放在旁邊的一個保險柜...把保險柜裡面的錢都拿走了,還換成了一堆廢紙...你看,我還是給了一個玻璃匣子你...你也還是不能對匣子裡面的東西做任何改變...但是你這一次拿到錢了...而且還把錢換成了廢紙...

下次再有人來打開保險柜的時候看到的就是辛辛苦苦賺的錢被你換成了廢紙...

那你說,為什麼實參和形參之間只能單向值傳遞,但是指針能改變變數的值呢?

如果把變數的值傳過去而不是傳地址,變數改變後是不是不會引起主函數的改變


swap中p1是指針形參,類型是(int*),實際就是一個long值,儲存了那個數值的內存地址,然後*是取值操作符,就是直接指向p1所指的數據,去修改它。
我想問的是:函數返回值和這個指針變數做函數參數改變的主函數里的值有沒有衝突
推薦閱讀:
相关文章