C 编程 - 传递引用

标签 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;
      }

输出:

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/

相关文章:

c - 制作 : How to generate list of all . c 文件,除了一个

c -\b 是如何实现的?

python - 如何在 Python 中将大量变量传入和传出函数?

c++ - 为什么我在main函数和其他函数中看到数组大小的不同值

c - 将结构传递给 C 中的函数

c - 当 "char bigchar[ 1u << 31 - 1 ];"工作正常时,为什么我应该使用 malloc()?

客户端端口号在服务器 TCP/IP 套接字中显示错误 C 语言编程

c - 本链表程序回顾

c++ - 为什么我们不能从 C++ 中的函数中通过引用返回对象?

c - 将指针传递给 char * 时 realloc() 失败。为什么? (因为它是按值计算的,而不是引用!)