我了解指针的概念(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;
}
答案 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 ++的原因之一。如果不必使用指针取消引用,也可以使代码更易于理解。