C ++函数定义中的“Type&”与“Type *”[重复]
Posted
技术标签:
【中文标题】C ++函数定义中的“Type&”与“Type *”[重复]【英文标题】:"Type&" vs "Type*" in C++ function definitions [duplicate] 【发布时间】: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
【参考方案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++ 的原因之一。如果您不必在代码中添加指针取消引用,它还可以让您的代码更易于理解。
【讨论】:
以上是关于C ++函数定义中的“Type&”与“Type *”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
[TypeScript] type、typeof、keyof