C語言學習筆記 指標作為函式引數傳遞位址詳解

2021-10-07 18:21:17 字數 1410 閱讀 3445

#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...