C传输作为指针

时间:2016-03-24 14:48:52

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

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

对我来说似乎完全一样。有什么不同吗?

2 个答案:

答案 0 :(得分:3)

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

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

如果您要修改something的内容,则需要将指向它的指针传递给被调用的函数并对指针进行操作。指针本身将通过值传递,但通过在已调用函数内取消指针,可以实现通过引用传递的结果。

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

答案 1 :(得分:1)

  • 前者是指针,有效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 ++引用在功能上等效于只读指针

int* const something // C equivalent of a reference