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

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

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

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表