2010-09-19 49 views
2

C++中以下參數傳遞機制之間的區別是什麼?對C++指針和參考主題的困惑

void foo(int &x) 
void foo(int *x) 
void foo(int **x) 
void foo(int *&x) 

我想知道在這種情況下參數是通過值傳遞或通過引用傳遞。

+0

這功課嗎? – SingleNegationElimination 2010-09-19 23:49:56

+0

不,我正在學習C++,但看起來很亂,而我只是感到困惑。 – user246392 2010-09-19 23:51:35

+0

如果有'&'符號,則通過引用傳遞參數。否則,它們通過值傳遞(指針通過值傳遞)。 – visitor 2010-09-20 08:18:43

回答

6
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來簡化指針和引用符號的使用。

+0

最後一個是指向引用的指針,它仍然需要取消引用。對指針的引用會被聲明爲'void foo(int&* x)' – Vargas 2010-09-20 00:15:24

+0

非常感謝! – user246392 2010-09-20 00:21:19

+2

@Vargas:對指針的引用是'int *&x',而不是'int&* x'。你提到的是'參考指針'。順便說一句,C++不允許指向引用。 – Chubsdad 2010-09-20 02:49:54

0

只要加上:我認爲你的間距是誤導。如果你改變它,也許事情會變得更清楚些。

,&,*等是類型的一部分,所以用式保持:

void foo(int& x) 
void foo(int* x) 
void foo(int** x) 
void foo(int*& x) 

INT &是爲int一個參考,INT *是一個指向int,int **是指向int的指針,依此類推。 您仍然需要從右到左讀取類型 - int * &是對指向int的指針的引用。但這是一致的。

我認爲這樣更容易閱讀,代表更好的意思。