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 *”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言核心技术——函数

函数与指针

[TypeScript] type、typeof、keyof

JavaScript中的call()apply()与bind():

Golang基础_07-结构struct

golang中函数与方法