【问题标题】:"Type&" vs "Type*" in C++ function definitions [duplicate]C ++函数定义中的“Type&”与“Type *”[重复]
【发布时间】:2018-08-30 02:26:59
【问题描述】:

我理解指针概念 (int*),但我无法理解 int&,因为它们给出了相同的结果。 int &data 到底是什么意思?

void add1(int *data){
  (*data)++;
}

void add2(int &data){
  data++;
}

int main()
{
  int i=0;

  add1(&i);
  printf ("value i = %d\n",i) // show 1

  add2(i);
  printf ("value i = %d\n",i); // show 2

  return 0;
}

【问题讨论】:

  • 你确定你没有使用 C++ 编译器吗?
  • & 表示引用。
  • @DanielA.White 引用是 C++ 中的一个特性,而不是 C

标签: c++ pointers reference


【解决方案1】:

函数签名:

void add2(int &data)

是 C++ 中的传递引用工具。这是一种允许函数更改传入的值并将该更改反映回调用者的方法。在 C++ 最初基于的 C 中,所有参数都是按值传递的,这意味着函数会获得 local 副本,如果更改,不会 影响原始副本传入的值。

顺便说一句,通过引用传递可能是我希望看到添加到 C 中的一个工具(不是完整的 C++ 引用,只是在函数调用中),因为我是可以肯定,关于 SO 的所有 C 问题中有 42% 与指针有关 :-)

在 C 和 C++ 中进行传递引用的方法可以在下面的行中看到。第一个是在 C++ 中正确的做法,第二个是“指针体操”可怜的 C 开发人员必须经过才能获得相同的效果:

void FortyTwo(int &x) { x = 42; }     // Call with FortyTwo(variable);
void FortyTwo(int *pX) { *pX = 42; }  // Call with FortyTwo(&variable);

在后者中,指针是按值传递的,但您可以使用该指针来获取(并更改)它指向的数据。在 C++ 中,您应该尽可能避免将指针传递给您想要更改的值,因为这是首先将引用添加到 C++ 的原因之一。如果您不必在代码中添加指针取消引用,它还可以让您的代码更易于理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2015-11-19
    • 2014-06-02
    • 2020-04-24
    相关资源
    最近更新 更多