C编程 - 参考传递

Kev*_*ith 6 c pass-by-value

在下面的C程序中,我不明白为什么在调用foo之后buf [0] ='A'.foo不是在做价值传递吗?

#include <stdio.h>
#include <stdlib.h>

    void foo(char buf[])
    {
      buf[0] = 'A';
    }

    int main(int argc, char *argv[])
    {
      char buf[10];

      buf[0] = 'B';
      printf("before foo | buf[0] = %c\n", buf[0]);
      foo(buf);
      printf("after foo | buf[0] = %c\n", buf[0]);

      system("PAUSE"); 
      return 0;
      }
Run Code Online (Sandbox Code Playgroud)

输出:

before foo | buf[0] = 'B' 
after foo | buf[0] = 'A'
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 12

void foo(char buf[])
Run Code Online (Sandbox Code Playgroud)

是相同的

void foo(char* buf)
Run Code Online (Sandbox Code Playgroud)

当你调用它时foo(buf),你按值传递指针,所以指针的副本就会生成.

指针的副本指向与原始指针相同的对象(或者,在这种情况下,指向数组的初始元素).

在C++通过引用语义传递的意义上,C没有传递引用语义.C中的所有内容都按值传递.指针用于通过引用语义传递.

  • @Kevin:因为函数可能只需要该值.没有副作用的函数更容易推理(并不是说使用C作为函数式编程语言会很远),并且通过值传递可以消除可能的副作用. (2认同)