Potrzebuję dużej tablicy null w C jako globalnej. Czy jest jakiś sposób na zrobienie tego poza wpisywaniem
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Claudiu
źródło
źródło
char
etc, ale jeśli chcesz mieć tablicę wskaźników, powinieneś ustawić je jawnie na NULL, nie ma (absurdalnie!) Żadnej gwarancji, że NULL jest reprezentowane jako bajty zerowe. Dzieje się tak, mimo że literał0
niejawnie reprezentuje wskaźnik null.Odpowiedzi:
Zmienne globalne i zmienne statyczne są automatycznie inicjowane do zera. Jeśli masz po prostu
w zakresie globalnym będą to same zera w czasie wykonywania. Ale faktycznie nie jest składnia skrótowym jeśli miał lokalną tablicę. Jeśli tablica jest częściowo zainicjowana, elementy, które nie zostały zainicjowane, otrzymują wartość 0 odpowiedniego typu. Możesz napisać:
Kompilator wypełni niepisane wpisy zerami. Alternatywnie możesz użyć
memset
do zainicjowania tablicy podczas uruchamiania programu:Byłoby to przydatne, gdybyś go zmienił i chciał zresetować z powrotem do wszystkich zer.
źródło
character
. to jestinteger
.{}
dyskusja: stackoverflow.com/questions/17589533/…memset
nie jest oczywiście poprawna: myślę, że działa tylko dla 0: stackoverflow.com/questions/11138188/ ...-Werror=missing-braces
w gcc, musi zostać zainicjowana{{0}}
. Jeśli pierwszy element struktury jest inną strukturą, to{{{0}}}
i tak dalej. Zobacz stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};
... który mnie tu przywiózł. Nie wiedziałem nawet, że to częściowe zerowanie było ważne, dopóki go nie zobaczyłem.Jeśli chcesz zainicjować tablicę wartościami innymi niż 0,
gcc
możesz zrobić:To jest rozszerzenie GNU C99 Designated Initializers . W starszym GCC może być konieczne użycie
-std=gnu99
do kompilacji kodu.źródło
...
do oznaczania zakresu jest rozszerzeniem specyficznym dla gcc.