C语言如何定义0数组

int n;
scanf("%d",&n);
int a[n]={0};
会出现错误, 如何把a[n]定义成全0数组

如果要定义0长度的数组,在C语言是不可以实现的,因为C语言不支持长度为0的数组,事实上,这也是没意义的。

要把定义的数组初始值设置为0,针对数组的类型,可以区分操作:
1 局部变量。对于局部变量可以在定义时进行初始化。
type name[N] = {0};
从表现上看,是把第一个元素赋值为0,但是C语言约定,对于显式的部分初始化的情况,没有显式初始化部分的值自动赋值为0,所以以上写法,可以做到将整个数组初始化为0。

2 全局变量或静态局部变量。
对于这两种变量, 同样可以使用1的方式,不过更简洁的写法是不做初始化,如
type name[N];
或
static type name[N];
因为C语言规定,全局变量或静态局部变量没有显式初始化时,默认初始化值为0。所以不做初始化时与初始化为0的效果相同,而且代码更简洁,执行也更高效。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
编译错误应该是a[n]的问题,C90标准不支持运行时才知道大小的数组。
定义成全零方式有:
a[n] = {0, };
memset(a, 0, sizeof(a));追问

不行啊
memset是什么?

追答

#include
void *memset(void *s, int c, size_t n);
把s开始的内存区域,按照字节数n,设置成c

本回答被提问者和网友采纳
第2个回答  2012-12-05
是编译错误吧,你这里的n是个变量,到运行时才能确定,但数组在编译时就要确定长度,所以出错。建议这样#define N 100 再用N
第3个回答  2012-12-05
定义数组容量不能用变量
即不能用n来定义
你可以直接开大数组或用vector
至于全零,用memset(a,0,sizeof(a));
第4个回答  2012-12-05
int a[n],就可以了追问

不行 数组里是随机数

相似回答