数组初始化,c为0

时间:2016-08-04 19:11:46

标签: c arrays initialization

我在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;
}

3 个答案:

答案 0 :(得分:7)

在C中,初始化与赋值不同,尽管两者都使用=

int foo[3] = { 0 };

表示&#34;使foo成为三个整数的数组,全部初始化为零&#34;,但foo[3] = 0;表示&#34;将foo的第四个元素设置为零&#34 ;.显然不同。

由于memset()以字节为单位,因此:

memset(f, 0, 10000);

错了,应该是:

memset(f, 0, sizeof f);

只要f是您的代码中的正确数组。

另外要注意,作为自动变量的非常大的数组可能不是非常便携。

答案 1 :(得分:1)

如果你喜欢这个

int f[10000] = {0};

然后

f[10000] = 0;

是错误的,因为索引在C中从0开始,所以你在数组边界外写字。

答案 2 :(得分:0)

As previously mentioned,您无法分配给数组。但是,您可以指定Log4j

struct

然后,

struct foo { int f[1000]; } f = {};