我是C编程的新手.我试图使用变量设置数组的大小,但我收到一个错误:"数组"的存储大小不是恒定的!
01 int bound = bound*4;
02 static GLubyte vertsArray[bound];
Run Code Online (Sandbox Code Playgroud)
我注意到当我用数字'20' 替换边界(在02行的括号内)时,程序将运行没有问题.但我试图动态设置数组的大小...
任何想法为什么我收到此错误?非常感谢,
AnT*_*AnT 11
您收到此错误是因为,正如编译器告诉您的那样,您的数组大小不是常量.在C89/90版本的C语言中,数组大小必须是常量.您不能"动态设置数组的大小".如果需要运行时大小的数组,则必须手动分配malloc或使用某些非标准的编译器特定方法(如alloca函数).
在C99版本的C语言中添加了对所谓的可变长度数组(VLA)的支持.C99编译器将接受自动数组的运行时大小的数组声明.然而,即使在C99中,您也无法声明运行时大小的静态数组,正如您所想的那样.
要创建一个非常量大小的数组(即在编译时已知),您需要使用它为它动态分配空间malloc()(并free()在不再需要时相应地释放它).
正如其他人所指出的那样,在符合C99的编译器中可以使用声明动态数组的功能.