在下面的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;
}
输出:
before foo | buf[0] = 'B'
after foo | buf[0] = 'A'
最佳答案
void foo(char buf[])
与
相同void foo(char* buf)
当您调用它时,foo(buf)
,您按值传递了一个指针,因此创建了一个指针的副本。
指针的副本指向与原始指针相同的对象(或者,在本例中,指向数组的初始元素)。
在 C++ 具有按引用传递语义的意义上,C 没有按引用传递语义。 C中的一切都是按值传递的。指针用于通过引用语义获取传递。
关于C 编程 - 传递引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415089/