簡體   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