Monday, June 26, 2017

[C++] Passing Pareameters

C支援Call by Value和Call by Pointer,C++多一個Call by Reference

Call by Value

  • int main() { 
  •     int x = 5; 
  •     foo(x); 
  • }
  • void foo(int x) { 
  •     x++; 
  • }
在"foo中的x"和"main中的x"是分開的兩個記憶體空間。

Call by Pointer

  • int main() { 
  •     int x = 5; 
  •     foo(&x); 
  • }
  • void foo(int *x) { 
  •     (*x)++; // 指向,並加1 
  • }
把變數的Reference傳入,foo的*x會指向這個Reference,共用同一快記憶體空間。

Call by Reference 

(C++新增,作用和目的雷同Call by Pointer,但在撰寫程式碼的時候方便很多,只需要在接入時多加一個&即可,特別注意int& xx; 是不行的,會出現 error: ‘xx’ declared as reference but not initialized,這個用法必定要被初始化。)
  • int main() { 
  •     int x = 5; 
  •     foo(x); // 不用加& 
  • }
  • void foo(int &x) { 
  •     x++; // 修改此x就是修改main的x 
  • }



把變數傳入,foo的&x會指向這個變數的Reference,共用同一快記憶體空間。

No comments:

Post a Comment