c語言學習筆記 數值交換用值傳遞和位址傳遞的區別

2021-10-04 07:19:34 字數 1027 閱讀 9212

1、用值傳遞進行數值交換

1 #include

2 3 void swap_variable(int numa, int numb)

4 12 

13 int main(void)

14 結果:

swap in variable:

a = 20, b = 10

a and b in main:

a = 10, b = 20

分析:這裡主函式的a和b兩個變數傳遞給子函式swap_variable(a, b)後,子函式swap_variable()裡面進行列印輸出時主函式a和b對應的numa和numb是進行了交換,但是執行到主函式進行列印輸出時主函式裡面的a和b是沒有進行交換的。這是因為主函式的a和b只是賦值給子函式的形參numa和numb,子函式只是將兩個形參進行了交換而沒有將主函式的實參a和b進行交換,而且子函式swap_variable()呼叫完後numa、numb和tmp都會自動釋放掉。

2、用位址傳遞進行數值交換

1 #include

2 3 void swap_pointer(int *numa, int *numb)

4 12 

13 int main(void)

14 結果:

swap in pointer:

a = 20, b = 10

a and b in main:

a = 20, b = 10

分析:這裡主函式的a和b兩個變數通過位址的形式傳遞給子函式swap_pointer(&a, &b),這裡的子函式swap_pointer(int *numa, int *numb)的形參是指標形式,指標存放的是位址,所以主函式的a和b需要通過取址的方式&a和&b進行傳遞,注意這裡通過將位址傳給子函式的指標形參numa和numb後,numa和numb就指向了主函式的a和b的位址了,也就是通過指標可以直接的去操作對應的位址,通過*運算子進行取值也就是直接操作位址對應的變數a和b。所以子函式和主函式都進行了數值的交換,但是子函式swap_pointer()執行完後*numa、*numb和tmp都會自動釋放掉。

C語言學習筆記《陣列》

1,已知陣列x有5個元素,精組y有6個元素.請分別對x和y排序。輸出x和y排序後的元素 include main y 6 int i,j,sum 0 for i 0 i 4 i int i,j,sum for i 0 i 9 i for i 0 i 9 i printf d t a i code c...

C語言學習筆記 陣列

陣列是用來儲存乙個固定大小的同型別元素的順序集合。type arrayname arraysize intarray 5 int array intarray 5 include int main int argc,const char argv int i for i 0 i 5 i 多維陣列最簡...

C語言學習筆記(數學)

1 使用整型表示式的絕對值 include int abs int expression 2 使用arccosine 反余弦 include double asin double expressoion 3 使用arctangent 反正切 include double atan double ex...