https://mengkang.net/book-c/ch08s01.html
因为数组类型做右值使用时,自动转换成指向数组首元素的指针,所以数组既然不能相互赋值或初始化,也就不能用数组类型作为函数的参数或返回值。
举例说明
// 错误一
int a[5] = { 4, 3, 2, 1 };
int b[5] = a;
// 错误二
b = a; // 假设a,b 都是数组
a = b这个表达式,a和b都是数组类型的变量,但是b做右值使用,自动转换成指针类型,而左边仍然是数组类型,所以编译器报的错是error: incompatible types in assignment。
// 错误三
void foo(int a[5])
{
...
}
int array[5] = {0};
foo(array);
上面的函数调用其实是传一个指针类型的参数,而不是数组类型的参数。
// 错误四,YY 的
int [] foo()
{
...
}
究其原因,就是 C 语言中数组类型做右值使用时,自动转换成指向数组首元素的指针,我们函数的参数、返回值,请用指针来替代数组。