【问题标题】:Confusion over C++ pointer and reference topic对 C++ 指针和参考主题的困惑
【发布时间】:2010-09-19 23:45:26
【问题描述】:

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

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

我想知道参数是按值传递还是按引用传递。

【问题讨论】:

  • 不,我正在学习C++,但是看起来很乱,我只是一头雾水。
  • 如果存在& 符号,则通过引用传递参数。否则它们按值传递(指针按值传递)。

标签: c++ pointers reference


【解决方案1】:
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 来简化指针和引用符号的使用。

【讨论】:

  • 最后一个是指向引用的指针,它仍然需要取消引用。对指针的引用将声明为 void foo(int &*x)
  • @Vargas:对指针的引用是 'int *&x' 而不是 'int &*x'。你提到的是'参考指针'。顺便说一句,C++ 不允许指针引用。
  • @Chubsdad +1; @Vargas,从右到左读取(“x 是对指向 int 的指针的引用”)
【解决方案2】:

只是添加:我认为您的间距具有误导性。如果你改变它,也许事情会变得更清楚一些。

、&、*等都是类型的一部分,所以和类型保持一致:

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

int& 是对 int 的引用,int* 是指向 int 的指针,int** 是指向 int 的指针,依此类推。 您仍然需要从右到左读取类型 - int*& 是对指向 int 的指针的引用。但这是一致的。

我认为这更容易阅读并且更好地表达了意思。

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多