当知道c的数组是在栈中开辟空间时,我就一直认为不能使用变长数组,所以第一次看到有人使用变长数组时觉得很奇怪,还是tony版主告诉我c99可以的(
见识少啊)。
我当时是这样理解的:在函数中定义变量就是让编译器记住栈中的一个地址,比如我假设int长度为4,栈的初始位置为100,我定义“int i,a[5],j;”后,编译器会把地址97对应变量i,地址77-96对应数组a(&a[0]=77),地址73对应变量j,当编译器编译函数内其他代码碰到变量i、a、j时,一定会以这些已分配好的地址取代,这种编译方式高效精炼(没看过编译原理,不知道理解的正确否)。如果使用变长数组,问题就很明显,比如我在后面又使用了a[10],数组长度增加后,要不会覆盖变量j的值,要不就需要一个专门的内存管理程序来管理栈内存,这显然违背函数单一功能的本质,增加额外开销(堆就是系统管理的一大片内存,在堆中使用数据会降低运行效率)。
当然在栈有限的空间使用变长数组肯定也有tony版主说的不确定性造成内存泄漏的危险,不可取。