大家都知道,c語言一般的引數都是傳值呼叫的,但有時候也有例外,下面就分析一下什麼時候傳值呼叫,什麼時候傳址呼叫。
標量引數都是傳值呼叫,不會對標量產生任何影響
#include void add_one(int value)
int main(int argc, char const *argv)
執行結果:
傳值前value=10
傳值後value=10
process returned 0 (0x0) execution time : 0.110 s
press any key to continue.
陣列和指標引數是傳址呼叫,相當於傳遞了乙個包含引數位址的指標,在函式中對陣列或指標的任何操作會間接的改變陣列和指標的本身
#include #define size 4
void clr_nums(int nums, int size)
}void clr_string(int *string)
int main(int argc, char const *argv) ;
int *string = "hello";
int i;
printf("傳址前\n");
printf("nums= ");
for (i = 0; i < size; i++)
printf("string=%s\n", string);
clr_nums(nums, size);
clr_string(&string);
printf("傳址後\n");
printf("nums= ");
for (i = 0; i < size; i++)
printf("string=%s\n", string);
return 0;
}
執行結果:
傳址前
nums= 1 2 3 4 string=hello
傳址後nums= 0 0 0 0 string=
process returned 0 (0x0) execution time : 0.111 s
press any key to continue.
函式的傳值和傳址呼叫(C語言)
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...
函式呼叫的傳值和「傳址」
函式呼叫的傳值和 傳址 以下文字只想說明乙個問題 所有的引數傳遞都是傳值 要想通過函式改變乙個變數的值,只有將此變數的位址傳入函式。其實c語言中根本沒有傳址這一 說,所有的函式在傳遞引數時都是採用的傳值呼叫,即在呼叫時完成 實參對形參的賦值,也就是說在傳遞引數時永遠都是將實參的值傳遞給形參。形參是乙...
函式引數的傳值和傳址
函式呼叫引數傳值和傳址的區別 傳值 把引數拷貝乙個副本,然後傳遞給函式體進行操作。但是對引數的操作不會影響到函式外的引數,範圍僅在當前的函式內有效。1 void compare int a,int b 兩個引數大小的比較 1 void copy int des,int sou 將引數sou拷貝到引數...