普通值 指標 引用作為函式引數時的理解

2021-08-19 16:38:58 字數 1406 閱讀 7499

很多時候,我們都會看到在教科書上寫著各種值傳遞,引用傳遞,一看一大堆,有時候看的還容易迷糊,什麼情況該怎麼傳總是區分不清,下邊我們用一小版塊並結合**例項講解下。

一、值傳遞

// 普通值傳遞

void test(int num)

int main(int argc, char* argv)

輸出結果如下:

in function test num = 5

in function main num = 9

可見按值傳遞,在test函式內部,修改num的值,對實參num並無影響,即test函式接收到的實際上是外層num的乙個拷貝。

// 指標按值傳遞

void testpt(int * p)

}int main(int argc, char* argv)

輸出結果如下:

9in function testpt p = 032c5978

in function main p = 00000000

在這裡我們需要稍微注意下,指標作為一種特殊的值(相對於上一種情況的int值而言)進行傳遞,結合testpt理解,在testpt內部對該引數進行分配記憶體,從輸出結果可以看到在函式內部的值已改變,但是在main函式體的p依然沒有改變,而已這樣也是值拷貝,不具備回傳效果。

下邊的涉及部分new空間沒有釋放,有些是演示的需要,實際開發中,可不能這樣哦,**new了,對應就得釋放掉。

二、指標的引用傳遞

例項:

void testptref(int* &pref)

}int main(int argc, char* argv)

輸出結果如下:

9in function testptref pref = 02674f08

in function main pref = 02674f08

可以看到,在testptref函式內外輸出的結果一樣了,說明內部的修改對傳入的實參起作用了。對指標的引用作為引數傳遞,其實並沒有拷貝,而是使用了同乙個變數。

三、二級指標作為引數傳遞

二級指標一般形式為int**p; 我們通常認為,乙個指標變數儲存乙個它所指向內容的位址。二級指標變數儲存的是指向位址的位址,即儲存了一級指標變數的位址。

例項:

void  test2pt(int **p)

}int main(int argc, char* argv)

輸出結果如下:

9in function test2pt p = 030a4f08

in function main p = 030a4f08

從結果可以看到,內外的指標值,即內部函式的修改對外部的該指標也起作用了。

「引用作為函式引數」與 「引用作為函式返回值」

一 引用作為函式引數 作為函式引數時引用有兩種原因 1 在函式內部會對此引數進行修改 2 提高函式呼叫和執行效率。關於第一點,都知道 c 裡提到函式就會提到形參和實參。如果函式的引數實質就是形參,不過這個形參的作用域只是在函式體內部,也就是說實參和形參是兩個不同的東西,要想形參代替實參,肯定有乙個值...

引用作為函式引數返回值

說明 1 以引用返回函式值,定義函式時需要在函式名前加 2 用引用返回乙個函式值的最大好處是,在記憶體中不產生被返回值的副本。例如 include float temp 定義全域性變數temp float fn1 float r 宣告函式fn1 float fn2 float r 宣告函式fn2 f...

指標和引用作為函式傳遞引數

引用傳遞 void outputnumber int nnumber 設定引用型別引數 intmain intargc,char argv 指標傳遞 void outputnumber int pnumber 使用指標作為函式引數 intmain intargc,char argv 輸出結果是一樣的...