C++中以下參數傳遞機制之間的區別是什麼?對C++指針和參考主題的困惑
void foo(int &x)
void foo(int *x)
void foo(int **x)
void foo(int *&x)
我想知道在這種情況下參數是通過值傳遞或通過引用傳遞。
C++中以下參數傳遞機制之間的區別是什麼?對C++指針和參考主題的困惑
void foo(int &x)
void foo(int *x)
void foo(int **x)
void foo(int *&x)
我想知道在這種情況下參數是通過值傳遞或通過引用傳遞。
void foo(int &x)
傳遞一個整數的引用。這是一個輸入/輸出參數,可以像函數中的常規整數一樣使用。值被傳回給調用者。
void food(int *x)
將指針傳遞到一個整數。這是一個輸入/輸出參數,但它的使用方式類似於指針,必須解除引用(例如*x = 100;
)。您還需要檢查它是否爲空。
void foo(int **x)
將指針傳遞到一個指針的整數。這是一個整型指針類型的輸入/輸出參數。如果要更改整數點的值(例如*x = &m_myInt;
),請使用此選項。
void foo(int *&x)
傳遞一個參考的指針的整數。像上面一樣,但不需要取消引用指針變量(例如x = &m_myInt;
)。
希望是有道理的。我會建議使用typedefs來簡化指針和引用符號的使用。
最後一個是指向引用的指針,它仍然需要取消引用。對指針的引用會被聲明爲'void foo(int&* x)' – Vargas 2010-09-20 00:15:24
非常感謝! – user246392 2010-09-20 00:21:19
@Vargas:對指針的引用是'int *&x',而不是'int&* x'。你提到的是'參考指針'。順便說一句,C++不允許指向引用。 – Chubsdad 2010-09-20 02:49:54
只要加上:我認爲你的間距是誤導。如果你改變它,也許事情會變得更清楚些。
的,&,*等是類型的一部分,所以用式保持:
void foo(int& x)
void foo(int* x)
void foo(int** x)
void foo(int*& x)
INT &是爲int一個參考,INT *是一個指向int,int **是指向int的指針,依此類推。 您仍然需要從右到左讀取類型 - int * &是對指向int的指針的引用。但這是一致的。
我認爲這樣更容易閱讀,代表更好的意思。
這功課嗎? – SingleNegationElimination 2010-09-19 23:49:56
不,我正在學習C++,但看起來很亂,而我只是感到困惑。 – user246392 2010-09-19 23:51:35
如果有'&'符號,則通過引用傳遞參數。否則,它們通過值傳遞(指針通過值傳遞)。 – visitor 2010-09-20 08:18:43