You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中为何函数形参数组可赋值而局部数组赋值报错?

问题解答

核心原因是C语言存在固定的语法调整规则:

  • 所有声明为数组类型的函数形参,都会被编译器隐式转换为对应的指针类型,声明时写的数组长度会被直接忽略。

你给出的代码中,func函数的形参int a[10],在编译阶段会被等价处理为int *a:
a本质是一个存储在栈上的普通int指针变量,属于可修改的左值,因此a = &x的赋值操作是完全合法的,只是让指针a重新指向了变量x的地址。

而函数内部定义的int b[10]是真实的数组类型:
C标准规定数组名是数组首元素的固定地址常量,属于不可修改的右值,不允许对数组名做整体赋值操作,因此b = &x会触发assignment to expression with array type的编译错误。

补充说明:即使你把形参写为int a[]、int a[100]等不同形式,只要是数组类型的函数形参,最终都会被调整为对应类型的指针,不会做任何数组长度校验。

内容的提问来源于stack exchange,提问作者Divya Juhi Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:01