今天,老婆说可以用变量定义数组的大小,我觉得有点不对,因为在我印象上c语言里禁止这样用,后来我查了一下资料,却发现C语言和java语言中对数组的用法却有很大的差别.
首先来看一个C语言中定义的代码段:
int size = 4;
char test[size];
在C语言中是错误的,因为定义数组大小时不能使用变量,数组大小定义在编译的时候就在栈中开辟了内存,而变量是动态的.int size = 4;其实是有两部分构成 int size;//声明 size = 4;//初始化.初始化不是编译器的工作,而是程序员的工作,所以初始化不是在编译阶段完成的(只有静态存储变量和全局变量的初始化是在编译阶段完成的),而是在程序运行时执行本语句时赋予初值的.这样数组编译根本不知道要开辟多大内存,所以语法错误.
C语言中,计算机的数据内存分配如下.____________________
| Stack区(数组,指针,结构体,局部变量)
____________________
| Static变量(静态变量,全局变量)
____________________
| Heep区(堆区)
____________________
| 代码段
____________________
另一方面在java 中如下代码段:
int size = 4;
char[] test;或者 char test[];
test = new char[size];
这是合法的,表现在:定义数组时不能指定大小,也就是char test[3];是错误的.因为char test[];只是在栈中开辟了一个数组的引用.而实际的开辟空间却是在堆里面.这时用new的时候就可以用变量来指定大小了.