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

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

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

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

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

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

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

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

似不对
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-02-28
楼上的道理不是很清楚:
char a[10];
a[10]="12325..";

其实这样的:
你定义了数组a[10];不在定义时赋值,那a[10]的代表是什么!?是数组的一个地址,但是数组a的范围是 a[0]-a[9] 数组下标都越界了,谈何赋值!本回答被提问者采纳
第2个回答  2009-02-28
char a[10] = "abc";

这个编译后的结果等价于

char a[10];

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

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

C里,为什么数组不能先定义再赋值?
第一:因为系统给数组分配内存地址的时候是在~(貌似好像是编译的时候)而 这个时候系统还没有给变量分配内存,即这时候整形变量a是不存在的。不能用 一个不存在的数来定义数组的长度。第二:你这个题是用整数10来定义数组长度的,而不是用变量所以是成立的。第三:这道题的问题出在于你所写的数组...

C里,为什么数组不能先定义再赋值?
不用int a[10]表示 数组元素不表示数组整体.)分两步 int a[10];定义数组顺便完成整个数组的 初始化 √(这是初始化 不是“整体”操作赋值,数组实际 是a[0]到a[9]同10个元素;然后使用数组 × ;abcdefg",不存在a[10]int a[10]={"}.;先定义数组 √ a[10]={"abcdefg".;},...

c语言中,为什么不能对字符指针变量指向的字符串再赋值?
因为C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。这样:char a[6]="hello";a[2]='c';就可以了。这里你为hello分配了一个长度为6的字符数组空间来存放。

C语言 数组 定义时赋值
c语言不允许在定义的时候直接用变量赋值。但用v[0]=x,v[1]=y...这样的方法是可以的。至于数组长度,C语言不支持动态定义大小,如int n=5;int a[n];这样也是错的。所以数组一般要定义成足够大。

C语言中数组必须先定义后使用吗?
C语言中,同变量一样;数组也必须先定义后使用。一维数组的定义形式:类型标识符 数组名[常量表达式];例如int a[10]; 其中a为地址常量。如变量的定义一样,int a ;double a;float a等;数组的定义只是把后面的变量名改为数组名而已。int a[10]就是定义了一个数组名为a的数组;此数组有10...

为什么c语言中,数组名是一个地址常量,不能对它进行赋值运算
在最终的汇编结果中,数组名只是一个标号,对应一个地址,在程序中使用数组就是要替换成这个起始地址,因此作为标号本身是不可以修改的,也不是一个变量。用数组名进行计算就是用数组起始地址计算,但不可以给数组名重新赋值

C语言能直接用一个数组名对数组进行赋值吗
回答:不可以,在int a[];时已经为数组在内存中开辟了空间,就是数组a和b的地址已经定下了,在C中,数组一旦在内存中被创建是是固定不变的,直到被取消,a=b,把b的地址给a是不行的。

C语言,一维数组已经赋值,然后再赋值的话,为什么就报错了呢?附图如下...
你第一次赋值就不对,这种赋值方式只能在声明初始化时,不能这样,数组是不能整体赋值的。int a[3]={1,2,3};这样是可以的,而像你那样不对。下面的for循环才是正确的赋值方式。

c语言为什么先定义的数组地址大而后定义的数组地址小
首先你需要了解栈和堆的概念,函数内的变量都是从栈中分配的,malloc的都是从堆中分配的;堆是向上增长(由低到高),栈是向下增长(由高到低)你的数组a和b都是函数变量,是栈空间分配的,所以a的地址小于b

为什么在C语言中数组无法赋值?
首先C语言里面的数组,一旦定义好了,是无法改变类型和长度的,也不是指针,不能改变指向的内容,所以如下这种写法 int a[10], b[10];a = b;是无法编译的。在其他语言里,比如java,c#,javascript,python等等等等,数组都是作为对象来使用的 可以写a=b,那么a原来表示的数组就被抛弃了,a和b...

相似回答