C99 允许定义具有非常量大小的数组,即用于定义数组的大小可以在运行时更改。解释它的代码片段是,
void dummy_function1(unsigned int length) {
char arrA[length]; //Allowed
.
.
}
但是,它不允许就地初始化它,即
void dummy_function2(unsigned int length) {
char arrA[length]={0}; //Not Allowed, compiler throws an error
char arrB[10]={0}; //Allowed
.
}
我不明白,为什么可变长度数组和恒定长度数组的行为存在差异。在这两种情况下,调用函数时都会为数组分配内存。
这是因为编译器不知道用多少个零来“填充”剩余元素。
该声明
char arrA[3] = { 0 };
可以很容易地翻译成
char arrA[3] = { 0, 0, 0 };
在编译时,而可变长度声明则不能。
由于 C 没有运行时系统,编译器必须添加代码以根据给定的长度动态地用零填充。 C 标准力求最小化,同时为程序员提供最大的能力,因此可以避免类似的事情。从 C11 开始,可变长度数组已从标准中删除,并被标记为可选功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)