为什么我不能创建一个由全局变量确定的大小的数组?
为什么数组没有被全局变量大小初始化?
#include<stdio.h> int size = 5; int main() { int a[size] = {1,2,3,4,5}; printf("%d",a[0]); return 0; } 编译错误显示为
据我说,数组应该被大小初始化. 如果我坚持使用全局变量(如果有可能的话)会是什么答案? 解决方法
在C99中,6.7.8 / 3:
6.6 / 2:
6.6 / 6:
6.7.5.2/4:
a具有可变长度数组类型,因为大小不是整数常量表达式.因此,它不能有一个初始化器列表. 在C90中,没有VLA,因此代码是非法的. 在C中也没有VLA,但你可以使大小为const int.这是因为在C中,可以在ICE中使用const int变量.在C你不能. 大概你并不打算改变长度,所以你需要的是: #define size 5 如果你真的想要一个可变长度,我想你可以这样做: int a[size]; int initlen = size; if (initlen > 5) initlen = 5; memcpy(a,(int[]){1,5},initlen*sizeof(int)); 或者可能: int a[size]; for (int i = 0; i < size && i < 5; ++i) { a[i] = i+1; } 很难说,在size!= 5的情况下,“应该”会发生什么.对可变长度的数组指定一个固定大小的初始值是没有意义的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |