繁体   English   中英

数组初始化,c为0

[英]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开始,所以你在数组边界外写字是错误的。

如前所述 ,您无法分配给数组。 但是,您可以分配给struct

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

然后,

f = (struct foo){};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM