很多時候,我們都會看到在教科書上寫著各種值傳遞,引用傳遞,一看一大堆,有時候看的還容易迷糊,什麼情況該怎麼傳總是區分不清,下邊我們用一小版塊並結合**例項講解下。
一、值傳遞
// 普通值傳遞
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 輸出結果是一樣的...