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

时间:2010-09-19 23:45:26

标签: c++ pointers reference

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

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

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

2 个答案:

答案 0 :(得分: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;)。


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

答案 1 :(得分: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的指针的引用。但那是一致的。

我认为这更易于阅读,更能代表更好的含义。