为什么字符数组在C中通过引用传递?

Sta*_*k18 1 c arrays string pointers

我有以下代码:

#include <stdio.h>

void changeValue(char str[]) {
        str[2] = 'a';
}

int main()
{
  char a[]="Hello world";
  changeValue(a);
  printf("%s", a);
}
Run Code Online (Sandbox Code Playgroud)

我试图了解这是如何工作的.为什么在传递名为'a'的数组时,它是通过引用传递的?那么,我在changeValue中所做的更改实际上是从外部看到的?不应该是定义为char*str的函数参数,以便能够更改它吗?

pmg*_*pmg 5

在许多情况下(包括将它们作为函数参数传递),数组将转换为指向其第一个元素的指针.

所以,你传递的不是数组.事实上,原型中使用的语法只是眼睛糖果

void changeValue(char str[]);
void changeValue(char *str);
Run Code Online (Sandbox Code Playgroud)

上面的原型是完全相同的!