#include
void
swap1
(int x,
int y)
intmain()
顯然,這是無法改變a,b的值的,只能改變形參x,y的值。
swap1
#include
void
swap1
(int
*px,
int*py)
intmain()
結果
s2:pa=
000000000061fe0c,pb=
000000000061fe08
s2:px=
000000000061fe0c,py=
000000000061fe08
s2:px=
000000000061fe08,py=
000000000061fe0c
s2:a=
1,b=
2s2:pa=
000000000061fe0c,pb=
000000000061fe08
解析:
由結果可以發現,形參都是值傳遞,此時,swap2函式的實參值是a,b的位址,在swap函式內部,px,py作為形參拷貝了a,b的位址,所以前兩個輸出的位址相同。但是在函式內部,t是乙個指向整數的指標,交換時實際上是交換的形參py,px的位址,但並沒有改變位址對應的數值,也就是說主函式裡
a=1;
&a=000000000061fe0c;
b=2;
&b=000000000061fe08
方框裡的值一直沒有改變,只是在swap方框下方的px,py的值
所以這樣不會改變實參的值。
如果想要改變主函式的實參的值,應該如下
swap2
void
swap2
(int
*px,
int*py)
intmain()
此時,swap2中改變的是a,b位址所儲存的值,因為對於乙個同乙個變數,一般其位址是在定義時就給定了的,程式中不會改變,所以這樣自然改變了a,b的值。
此時px,py的值不變,但是px,py所指的值改變。
指標作為函式引數,C語言指標作為函式引數詳解
include void swap int a,int b 函式宣告 intmain void void swap int a,int b 大家想一下,執行這個程式是否能互換 i 和 j 的值?不能!i 還是3,j 還是5。因為實參和形參之間的傳遞是單向的,只能由實參向形參傳遞。被調函式呼叫完之後系...
C語言指標變數作為函式引數
有讀者反饋,不理解字元陣列和普通陣列的區別,下面筆者作一下解答。實際上,字元陣列和普通陣列一樣,沒有本質區別。請大家注意陣列型別的含義 資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。字元陣列的每個元素都是char型別,整型陣列的每...
c語言指標作為函式的引數
在c語言中實參和形參之間的資料傳輸是單向的 值傳遞 方式,也就是實參可以影響形參,而形參不能影響實參。指標變數作為引數也不例外,但是可以改變實參指標變數所指向的變數的值。include void swap1 int x,int y swap2 int px,int py swap3 int px,i...