C 传递为指针

C transmission as a pointer

我是 C 的新手。谁能解释一下它们之间的区别是什么?

我通常这样使用指针:

int myFunction(int* something) {
  ...
}

int main() {
  int something;
  something = 0;

  myFunction(&something);
  ...
}

但我发现代码如下所示:

int myFunction(int& something) {
  ...
}

int main() {
  int something;
  something = 0;

  myFunction(something);
  ...
}

这对我来说似乎完全一样。有区别吗?

如您所述,int myFunction(int& something) { 不是 有效的 C。它是一个参考,用于 C++.

C 和 C++ 不同的语言,尽管语法相似。

如果你想修改something的内容,你需要将指向它的指针传递给被调用的函数并对该指针进行操作。指针本身将按值传递,但是通过在被调用函数内部取消引用指针,可以达到按引用传递的结果。

所以你的第一个片段是有效的。你应该在 C 中使用它。

  • 前者是指针,后者有效C。
  • 后者是 C++ 参考,不是有效的 C。

最显着的区别是 "syntactic sugar"。要访问指针 something 的内容,您必须键入 *something。当对 C++ 参考 something 执行相同操作时,您不需要 *.

一个更细微的区别是指针可以用于指针运算。例如,要实现库函数 strlen,你可以这样做:

size_t strlen (const char* s) 
{
  const char* start = s;

  while(*s != '[=10=]')
  {
    s++;
  }

  return (size_t)(s - start);
}

如果 s 是参考,这是不可能的。您必须使用单独的计数器等

请注意,C++ 引用在功能上 100% 等同于只读指针

int* const something // C equivalent of a reference