會C語言中函數的參數傳遞其實只有一種傳遞方式,即值傳遞,也就是實參被複制給(被調用函數棧上的)形參,所以形參會在函數結束時消亡。既然是複製,所以操作形參當然不會影響實參。
那麼爲什麼通過傳遞指針,爲什麼可以影響到實參(指針)所指向的值呢?
以下是我的理解,當實參是指針變量的情況下,將其內容(指針值)複製給函數中的形參(指針變量),因此形參獲得了一個指向一個變量的值,該變量和函數不在同一個棧上,但形參(指針)依舊可以對其操作。這就意味着兩個指針(形參和實參)指向了同一個內存;
void test(int *fp)
{
cout << fp << endl;//輸出形參地址
cout << *fp << endl;//輸出形參的指向地址
*fp = 0;
}
void main()
{
int i = 10;
int *p = &i;
cout << &p << endl;//輸出實參的地址
cout << *p << endl;//輸出實參的指向地址
test(p);
}
以上代碼可以驗證p 和fp 不是同一個變量,而他們指向的內存的地址&i是一樣的。
也就是指針參數同樣是以值傳遞的方式進行傳遞