close
值傳遞:
形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被調用函數的角度來說,值傳遞是單向的(實參->形參),參數的值只能傳入,
不能傳出。當函數內部需要修改參數,並且不希望這個改變影響調用者時,采用值傳遞。
指針傳遞:
形參為指向實參地址的指針,當對形參的指向操作時,就相當於對實參本身進行的操作
C語言中沒有引用傳遞
下面的代碼對此作出了細致解釋(從實參,形參在內存中存放地址的角度 說明了問題的本質,容易理解
#include<stdio.h>
void change1(int);
void change2(int *);
int main()
{
int n = 8;
printf("實參地址 %d\n",&n);
change1(n);
printf("*****執行change1,結果:n = %d",n);
change2(&n);
printf("*****執行change2,結果:n = %d",n);
return 0;
}
void change1(int n)
{
printf("值傳遞 函數操作地址%d\n", &n);
n++;
}
void change2(int * n)
{
printf("指針傳遞 函數操作地址%p\n", n);
int temp;
/* 此處不可寫為 *n = *n + 1;編譯器會報錯:錯誤: 雙目運算符 * 操作數(‘int’和‘int *’)無效*/
temp = *n;
*n = temp + 1;
}
運行結果如下
實參地址 -1080956420
值傳遞 函數操作地址-1080956448
*****執行change1,結果:n = 8
指針傳遞 函數操作地址0xbf91e9fc
*****執行change2,結果:n = 9
可以看出,實參的地址為1080956420
采用值傳遞的時候,函數操作的地址是1080956448並不是實參本身,所以對它進行操作並不能改變實參的值
接下來是指針傳遞,也可發現操作地址是實參地址
指針傳遞的實質:
指針傳遞參數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函數的形式參數作為被調函數的局部變量處理,
即在棧中開辟了內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的
任何操作都是作為局部變量進行,不會影響主調函數的實參變量的值。
全站熱搜