C ++函数定义中的“ Type&”与“ Type *”

时间:2018-08-30 02:26:59

标签: c++ pointers reference

我了解指针的概念(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;
}

1 个答案:

答案 0 :(得分:3)

函数签名:

void add2(int &data)

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

  

顺便说一句,按引用传递可能是我希望看到的一种添加到C中的功能(不是完整的C ++引用,仅在函数调用中),因为我可以肯定的是,这里所有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 ++的原因之一。如果不必使用指针取消引用,也可以使代码更易于理解。