簡體   English   中英

對C ++指針和參考主題的困惑

[英]Confusion over C++ pointer and reference topic

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) 
void foo(int* x)
void foo(int** x)
void foo(int*& x)

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

我認為這更容易閱讀,代表的含義更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM