指標變數作為函式引數為了改變指標變數指向實參的值
阿新 • • 發佈:2019-02-07
C語言使用值傳遞時,僅僅將實參的值傳遞給形參。
對於第一種寫法
main函式傳遞給Swap函式的是&a和&b的值,即a和b所在的地址的值
那麼Swap函式裡面通過*x來更改的就是&a所在的地址裡面的值,也就是a本身的值了,所以第一種寫法main函式呼叫Swap函式之後,a和b的值會發生互換。
對於第二種寫法
main函式傳遞給Swap函式的是a和b的值,即只是將15和8傳遞給了Swap函式
那麼Swap函式裡面更改15和8,和main函式的a和b沒有啥關係的,所以第二種寫法main函式呼叫Swap函式之後,a和b的值不會發生互換。Swap函式只是更改了x和y的值,對a和b沒有什麼影響要理解值傳遞和地址傳遞的區別。
第二個程式就是值傳遞。實參a的值傳給形參x,實參b的值傳給形參y。這裡的x與a只是值相等了,但是兩個不同的記憶體單元。好比一班和二班兩位同學,只是名字都叫張三,卻是兩個不同的人。同理,b和y也類似於一班和二班另兩位同學,只是名字都叫李四,卻是不同的兩人。在swap函式中,只是對x和y操作,類似於只是二班的張三和李四發生了點變化。他們的變化是不會影響一班的張三和李四的。所以x和y的變化不會影響a和b。因為這是四個不同的記憶體單元。
第一個程式是地址傳遞。實參&a(a的地址)傳給形參x,實參&b(b的地址)傳給形參y。這樣的話,x就指向了a,y也指向了b。程式碼中temp=*x;就等價於temp=a;了。 同理,*x=*y; 等價於a=b; *y=temp;等價於b=temp; 。這裡對*x和*y操作,實際上就是對a和b的操作。所以會影響a和b的值