傳值
function(int A);//A形參
int main(){
function(a);//a實參
return 0;
}
系統在內存裏生成一個a的複製。
傳指針
function(int* p2);//p2形參
int main(){
int* p = a;
function(p);//p實參
return 0;
}
實參p是一個指向a的指針,傳指針其實就是傳值,只不過別人傳int類型的值(一個數),它傳指針類型的值(指針類型的值就是一塊內存的地址)。系統生成一個p的複製p2,p2跟p一樣指向同一片內存塊。
可見函數對p2的任何操作都不會影響到p。
指針p保存的是a的地址(&a),通過*p來取得其所指向的值a。
傳引用
function(int &A);//A形參
int main(){
function(a);//a實參
return 0;
}
傳引用傳遞的是實參a本身,而不是實參的一個拷貝,形參的修改就是實參的修改。系統直接使用原始變量的內存空間。
傳指針的引用
function(int* &p2);//p2形參
int main(){
int* p = a;
function(p);//p實參
return 0;
}
結合前兩個易得。