參考《c/c++程式設計師面試寶典》
在c++中,函式的引數和返回值的傳遞方式有3中:引用傳遞、值傳遞和指標傳遞。
值傳遞是指將要傳遞的值當做乙個副本傳遞。值傳遞過程中,被調函式的形參作為被調函式的區域性變數處理,在記憶體的堆疊中開闢空間以存放由主調函式存放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形參的任何操作都是作為區域性變數進行,不會更改主調函式的實參變數的值。
void func1(int x)
int n = 0;
func1(n);
count
<< "n = "
<< n << endl; //輸出n = 0
值傳遞將要傳遞的值當做乙個副本傳遞,在函式呼叫時,實參把它的值傳遞給對應的形參,方法執行中形參值的改變不影響實參。
引用傳遞傳遞的是引用物件的記憶體位址。在位址傳遞中,被調函式的形參也作為區域性變數在堆疊中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被作為間接定址,即通過堆疊中存放的位址訪問主調函式中的實參變數。所以,被調函式對相殘做的任何改變都會影響主調函式中的實參變數。
void func2(int& x)
int n = 0;
func2(n); // 引用傳遞
cout
<< "n = "
<< n << endl; // 輸出 n = 10
值傳遞 傳遞的是乙個值的副本。函式對形參的操作不會影響實參的值,而引用傳遞傳遞的是引用物件的記憶體位址,函式對形參的操作會影響實參的值,實參的值將會隨著形參值的更改而同樣進行改變
指標和引用都是關於位址的概念,指標指向一塊記憶體,它的內容是所指記憶體的位址。而應用是某塊記憶體的別名。指標是作為乙個真正的實體存在的。
指標能夠毫無約束地操作記憶體中的任何東西,由於指標功能強大,所以導致它比較危險。
指標和引用的具體區別如下:
指標是乙個實體,而引用僅是個別名;
引用使用時無需解引用(*),指標需要解引用;
引用只能在定義時被初始化一次,之後不可變;指標可變
引用沒有const,指標有const;
引用不能為空,指標可以為空;
sizeof對引用得到的是所指物件的大小,對指標是指標本身的大小;
指標和引用的自增(++)運算不一樣;
程式為指標分配記憶體空間,引用則沒有。
引用傳遞與值傳遞
看 define n 10000 define n 10000 ini set memory limit 1g function microtime float function printarray0 arr 引用傳遞 function printarray1 arr 值傳遞 for i 0 i ...
值傳遞與引用傳遞
分析 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。由於x 1 是在test方法棧裡面執行的,所以只會改變test方法棧裡面的x值,而不會改變main方法棧裡面的x值 形參的改變不會影響實參 引用傳遞,傳遞的是實際引數的位址.傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同乙個引用 同乙個記...
值傳遞與引用傳遞
值傳遞,只是傳遞副本,而引用傳遞,是傳遞乙個位址 using system using system.collections.generic using system.linq using system.text v console.writeline 引用傳遞,結果為!r static void ...