周梦康 发表于 2018-02-09 1731 次浏览 标签 : C语言快速入门

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 语言中数组类型做右值使用时,自动转换成指向数组首元素的指针,我们函数的参数、返回值,请用指针来替代数组。

评论列表