C ++中以下参数传递机制有什么区别?
void foo(int &x)
void foo(int *x)
void foo(int **x)
void foo(int *&x)
我想知道参数在哪种情况下通过值传递或通过引用传递。
答案 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的指针的引用。但那是一致的。
我认为这更易于阅读,更能代表更好的含义。