c - c中用0初始化数组

标签 c arrays initialization

我在 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/

相关文章:

variables - 在内核调用之前从 CPU 初始化 GPU 的单个变量

c - "undefined reference to ` pow '"即使使用 math.h 和库链接 -lm

python - 是否可以将关系数据库表存储为 Elasticsearch 中的不同索引如果是,那么如何在索引中传递关系

jquery - 使用 jQuery 将类添加到 DOM 对象数组的正确方法是什么?

arrays - Coldfusion 从动态表单复选框创建数组

java - Dr Java 代码错误

java - Java中的默认值和初始化

c - C中双向链表的内存问题

c - 在 ncurses 中使用退格键

c - 如何转换将整数值的长度和由该值组成的字节字符串复制到任意字节的C代码?