c語言函數是怎么傳遞參數的


其實就是把變量或常量復制了一份給函數中的變量,簡單說來就是復制的過程。

 

有一個很經典的問題:用函數交換兩個變量的值。

int a=1;

int b=2;

swap(a,b)

有一個函數是這樣實現的

voidswap(int m,int n)

{

  int t;

  t=m;m=n;n=t;

}

printf("a=%d b=%d",a,b);

最后輸出a和b的值,我們預期a和b的值可能被交換了,但實際上根本沒有,是怎么回事呢?

 

問題出在函數參數傳遞,實際上在調用swap(a,b)發生的一個“值復制”過程

m=a,n=b  //把a的值復制給了m,把b的值復制給了n

而在swap函數內部是實現了被復制的a和被復制的b的交換,而在函數外部並沒有完成原始的a和原始的b的交換

 

 

如果函數參數是指針為什么又可以呢?

int a=1;

int b=2;

swap(&a,&b)

 

voidswap(int *m,int *n)

{

  int t;

  t=*m;*m=*n;*n=t;

}

 

在調用 swap(&a,&b)的時候是一個“地址復制”的過程,具體如下

m=&a,n=&b//把變量a的地址復制給了m,把變量b的地址復制給了n

在函數內部

*m就等於*&a,也就是在函數內部訪問到了函數外部的a

*n就等於*&b也就是b。也就是在函數內部訪問到了函數外部的b

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM