[英]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開始,所以你在數組邊界外寫字是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.