C里,为什么数组不能先定义再赋值?

来源:百度知道 编辑:UC知道 时间:2024/06/08 19:25:58
好像普通变量那样。例如:
int a;
a=10;
为什么数组不能写成:
char a[10];
a[10]=“abce……”;
我不过是绕弯子绕变量上去了,因为变量可以先定义,然后系统分配一定的含随机值的内存。这时再赋值初始化就成立。
所以我考虑不明白,数组为什么不可以先定义一定的范围,然后系统给它分派一定的内存,再初始化。

一楼的朋友,感谢你的善意提醒,但我是那为了省略简写的,你没看我加一堆省略号么。对于这样语法的错误误导你给我的答案,我十分的抱歉。

楼上的道理不是很清楚:
char a[10];
a[10]="12325..";

其实这样的:
你定义了数组a[10];不在定义时赋值,那a[10]的代表是什么!?是数组的一个地址,但是数组a的范围是 a[0]-a[9] 数组下标都越界了,谈何赋值!

char a[10] = "abc";

这个编译后的结果等价于

char a[10];

memcpy(a, "abc", sizeof("abc"));

你那样写语法上讲不通的。

第一:因为系统给数组分配内存地址的时候是在~(貌似好像是编译的时候)而

这个时候系统还没有给变量分配内存,即这时候整形变量a是不存在的。不能用

一个不存在的数来定义数组的长度。

第二:你这个题是用整数10来定义数组长度的,而不是用变量所以是成立的。

第三:这道题的问题出在于你所写的数组名和变量名是一样的。这种定义方式貌

似不对