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並不是實參本身,所以對它進行操作並不能改變實參的值
接下來是指針傳遞,也可發現操作地址是實參地址
指針傳遞的實質:
指針傳遞參數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函數的形式參數作為被調函數的局部變量處理,
即在棧中開辟了內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的
任何操作都是作為局部變量進行,不會影響主調函數的實參變量的值。
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 愛在屋簷下 的頭像
    愛在屋簷下

    愛在屋簷下的部落格

    愛在屋簷下 發表在 痞客邦 留言(0) 人氣()