对C++指针和参考主题的困惑

use*_*392 2 c++ pointers reference

C++中以下参数传递机制有什么区别?

void foo(int &x) 
void foo(int *x)
void foo(int **x)
void foo(int *&x)
Run Code Online (Sandbox Code Playgroud)

我想知道参数在哪种情况下通过值传递或通过引用传递.

Joe*_*ood 6

void foo(int &x)
Run Code Online (Sandbox Code Playgroud)

将引用传递给整数.这是一个输入/输出参数,可以像函数中的常规整数一样使用.值被传递回调用者.


void food(int *x)
Run Code Online (Sandbox Code Playgroud)

将指针传递给整数.这是一个输入/输出参数,但它像指针一样使用,必须取消引用(例如*x = 100;).您还需要检查它是否为空.


void foo(int **x)
Run Code Online (Sandbox Code Playgroud)

将指针传递给指向整数的指针.这是整数指针类型的输入/输出参数.如果要更改整数点的值(例如*x = &m_myInt;),请使用此选项.


void foo(int *&x)
Run Code Online (Sandbox Code Playgroud)

将引用传递给指向整数的指针.像上面一样,但不需要取消引用指针变量(例如x = &m_myInt;).


希望有道理.我建议使用typedef来简化指针和引用符号的使用.

  • @Vargas:对指针的引用是'int*&x'而不是'int&*x'.你提到的是"引用指针".顺便说一句,C++不允许指针引用. (2认同)