[英]array initialisation with 0 in c
我在C中创建了一个int
数组并用0初始化它,如下所示 -
int f[10000] = {0};
我的程序要求我在循环结束时重新初始化这个数组。 所以,我执行了这一步 -
f[10000] = 0;
但这没效果。 我甚至试过了
f[10000] = {0};
但也有错误。 最终,我不得不使用memset
。 任何人都可以帮助,因为错误发生在哪里,为什么?
额外信息 - 我使用ideone.com进行编码目的
作为参考,这里是完整的代码 -
#include <stdio.h>
int main(void) {
int t, n, k, f[10000] = {0}, c[10000] = {0}, i, v, count = 0;
scanf("%d", &t);
while (t--) {
scanf("%d %d", &n, &k);
for (i = 1; i <= n; i++) {
scanf("%d", &v);
if (v == i) {
f[i] = 1;
}
c[v]++;
}
for (i = 1; i <= n; i++) {
if (!f[i] && c[i] >= k) {
count++;
}
}
printf("%d\n", count);
count = 0;
memset(f, 0, 10000);
memset(c, 0, 10000);
//f[10000] = 0; this didn't worked
//c[10000] = 0; this didn't worked
}
return 0;
}
在C中,初始化与赋值不同,尽管两者都使用=
。
int foo[3] = { 0 };
表示“使foo
为三个整数的数组,全部初始化为零”,但foo[3] = 0;
表示“将foo
的第四个元素设置为零”。 显然不同。
由于memset()
以字节为单位,因此:
memset(f, 0, 10000);
是错的,它应该是:
memset(f, 0, sizeof f);
只要f
是代码中的正确数组。
还要注意,作为自动变量的非常大的数组可能不是非常便携。
如果你喜欢这样的话
int f[10000] = {0};
然后
f[10000] = 0;
因为索引在C中从0开始,所以你在数组边界外写字是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.