【问题标题】:C transmission as a pointerC传输作为指针
【发布时间】:2016-07-12 05:06:39
【问题描述】:

我是 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);
  ...
}

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

【问题讨论】:

  • 前面标记的 q 是 C++ 的,而这个标记是 C。我仍然相信,它们是不同的语言。
  • @SouravGhosh 我很确定你是对的:)

标签: c pointers pass-by-value function-calls


【解决方案1】:

正如您所提到的,int myFunction(int& something) { 不是有效的 C。它是一个引用,在 C++ 中使用。

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

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

所以你的第一个 sn-p 是有效的。你应该在 C 中使用它。

【讨论】:

  • 我明白了,这就是问题所在!所以我不能在C中使用它?谢谢。
【解决方案2】:
  • 前者是一个指针,它是有效的C。
  • 后者是 C++ 引用,它是无效的 C。

最显着的区别是“语法糖”。要访问指针something 的内容,您必须输入*something。对 C++ 引用 something 执行相同操作时,您不需要 *

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

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

  while(*s != '\0')
  {
    s++;
  }

  return (size_t)(s - start);
}

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

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

int* const something // C equivalent of a reference

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2014-01-21
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多