C語言中函數之指針參數

會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是一樣的。
也就是指針參數同樣是以值傳遞的方式進行傳遞

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章