我在 C 中创建了一个 int
数组并用 0 初始化它,如下所示 -
int f[10000] = {0};
我的程序要求我在循环结束时重新初始化这个数组。所以,我执行了这一步 -
f[10000] = 0;
但这并没有奏效。我什至尝试过
f[10000] = {0};
但也有错误。最终,我不得不使用 memset
。任何人都可以帮助解决错误发生的位置以及原因吗?
EXTRA INFO - I USED ideone.com FOR CODING PURPOSE
为了引用,这里是完整的代码-
#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
是您代码中的正确数组即可。
另请注意,作为自动变量的非常大的数组可能不太便携。
关于c - c中用0初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775537/