函式的傳值和傳址呼叫(C語言)

2021-08-20 10:53:19 字數 1053 閱讀 6463

1:傳值呼叫。傳值呼叫顧名思義就是將引數的值傳遞給函式,而函式在進行呼叫時會複製這個值,然後將複製的值在函式中進行呼叫。

void swap(int a, int b)

int temp;

temp = a;

a = b;

b = temp;

int main(void)

int x = 1, y = 2;

swap(x, y);

printf("%d %d\n", x, y);

return 0;

這是乙個swap函式,用來交換兩個變數的值,然後在主函式中呼叫了這個函式目的是將x, y兩個變數的值進行交換, 但是這個函式卻達不到目的。

分析一下這個函式, 首先是乙個void型別無返回值的函式,a和b是兩個整型的形式引數,然後交換其兩個變數的值。 

主函式中  swap(x, y), x和y是實際引數, 函式在呼叫的時候首先會複製x和y的值, 我們將複製的值假設為n和m(n == x, m == y,但是&n != &x, &m != &y)意思就是值雖然相同 但是位址是不同的。

在函式中實際是對m和n的值進行呼叫, 改變了m和n的值, 但是退出函式時,這個值將會被銷毀, 因為他是儲存在棧上的,所以傳值呼叫不改變實際引數的值。

void swap(int *a, int *b)

int temp;

temp = *a;

*a = *b;

*b = temp;

int main(void)

int x = 1, y = 2;

swap(&x, &y);

printf("%d %d\n", x, y);

return 0;

這個函式是將乙個指向整型的指標當作引數傳遞,首先呼叫的時候還是會將引數進行複製,假設複製後的指標為p1和p2,(p1 == &x, p2 == &y),首先複製的指標的位址和實際引數的位址是相同的,然後再看函式,函式對指標進行間接引用,將指標所指向位址的值進行了改變,當退出函式時,p1和p2兩個變數還是會被銷毀,但是我們已經將這塊位址的值改變了,所以實際引數的值也會被改變,因為他們的位址是相同的。

C語言函式引數的傳值和傳址呼叫

大家都知道,c語言一般的引數都是傳值呼叫的,但有時候也有例外,下面就分析一下什麼時候傳值呼叫,什麼時候傳址呼叫。標量引數都是傳值呼叫,不會對標量產生任何影響 include void add one int value int main int argc,char const argv 執行結果 傳...

函式呼叫的傳值和「傳址」

函式呼叫的傳值和 傳址 以下文字只想說明乙個問題 所有的引數傳遞都是傳值 要想通過函式改變乙個變數的值,只有將此變數的位址傳入函式。其實c語言中根本沒有傳址這一 說,所有的函式在傳遞引數時都是採用的傳值呼叫,即在呼叫時完成 實參對形參的賦值,也就是說在傳遞引數時永遠都是將實參的值傳遞給形參。形參是乙...

傳值呼叫 傳址呼叫

void swap int x,int y int tmp x x y y tmp int main int a 10 int b 20 printf a d b d n a,b swap a,b 傳值呼叫,僅僅是傳值,其實x賦值為10,y賦值為20了,swap函式也用了,printf a d b ...