1. 程式人生 > >C語言:函式中引數的傳值與傳地址

C語言:函式中引數的傳值與傳地址

任務程式碼:

  1. #include <stdio.h>

  2. void swap(int *a ,int *b)//按之前對指標認識,*a代表指標變數a,a儲存的是地址,*a是地址的值。

  3. { //但是可以看到下面傳輸過程中swap(&a,&b),取的是地址傳輸給了*a.看似是矛盾的!

  4. //這裡著重注意特例!!!:函式的引數是指標型別,會將一個變數的地址傳送到被呼叫的函式中。

  5. //不是傳遞值,是傳遞地址值!!!!!!

  6. int t;

  7. t=*a;

  8. *a=*b;

  9. *b=t;

  10. return;

  11. }

  12. int main()

  13. {

  14. int a,b;

  15. printf("請輸入兩個數:");

  16. scanf("%d %d",&a,&b);

  17. printf("呼叫前:%d %d\n",a,b);

  18. swap(&a,&b);//傳輸的是a,b兩個變數的地址

  19. printf("呼叫後:%d %d\n",a,b);

  20. return 0;

  21. }

執行情況:

知識總結:

函式呼叫結束後回會釋放記憶體空間;

傳地址需要運用指標來做:

尤其注意特例:和傳統指標概念理解的的不同

另外:這兩種看似符合邏輯的做法也是行不通的!(尤其是第二種)

所有函式指標在執行的時候,形式引數的值無論怎麼變化都會被記憶體釋放(不會影響返回結果),而真正有存在意義的是形式引數中存放的地址,將會再返回的時候影響結果

心得體會: