数组的尺寸(即其元素个数)只能确定一次,就像房屋,建立之后,要想改变面积,就得拆掉重建,是无法在原来基础上伸缩的。当你用int a[n]这种形式开辟数组的时候,n只能是常数,但数组里面的内容不是常数,每个元素都是可变的。int a[n]的问题在于,编译器在编译时,是否能够判断n是常数。如果你写int n = 10,然后再写int a[n],那么编译器就能够判断出n是常数,编译可以通过,它能够在程序中事先分配n * sizeof(int)的空间给数组a。但现在你的n是需要在运行时从键盘动态接收的,编译器根本无法知道n有多大,那么它在编译时就无法确定分配多大的空间给数组a,于是会给出编译错误信息。
像你这样要从键盘输入n,运行时动态创建数组,不能用int a[n]这样的形式,必须用int* a = (int*)malloc(n)这样的形式来创建数组a。但即使这样,一旦创建,这个数组的尺寸也同样固定下来了,要想通过改变n的值来改变数组a的大小,是不可能的,此时必须先把原来的数组释放掉,再用新的n值重建一个数组。这样的过程充满了陷阱,你不妨自己想象一下那些陷阱都是什么,这才是你写编程时要重点学习的地方,明白这些原理,才能辅助你学习其他语言,明白像BASIC那样的动态数组是怎么回事。
[
本帖最后由 TonyDeng 于 2011-10-31 03:18 编辑 ]