Saya membutuhkan array nol besar di C sebagai global. Apakah ada cara untuk melakukan ini selain mengetik
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Claudiu
sumber
sumber
char
dll, tetapi jika Anda menginginkan array-of-pointer, Anda harus mengaturnya secara eksplisit ke NULL, tidak ada (tidak masuk akal!) Tidak ada jaminan bahwa NULL direpresentasikan sebagai nol-byte. Ini meskipun0
secara literal secara implisit mewakili pointer nol.Jawaban:
Variabel global dan variabel statis secara otomatis diinisialisasi ke nol. Jika sudah sederhana
pada lingkup global, semua nol pada saat runtime. Tapi sebenarnya ada adalah sintaks singkatan jika Anda memiliki array lokal. Jika sebuah array diinisialisasi sebagian, elemen-elemen yang tidak diinisialisasi menerima nilai 0 dari tipe yang sesuai. Anda bisa menulis:
Kompiler akan mengisi entri yang tidak tertulis dengan nol. Atau Anda dapat menggunakan
memset
untuk menginisialisasi array pada saat startup program:Itu akan berguna jika Anda telah mengubahnya dan ingin mengatur ulang kembali ke semua nol.
sumber
character
. itu adalahinteger
.{}
diskusi: stackoverflow.com/questions/17589533/…memset
tidak jelas benar: Saya pikir itu hanya berfungsi untuk 0: stackoverflow.com/questions/11138188/…-Werror=missing-braces
dalam gcc, harus diinisialisasi ke{{0}}
. Jika elemen struct pertama adalah struct lain maka{{{0}}}
dan seterusnya. Lihat stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};
... yang membawaku ke sini. Aku bahkan tidak tahu bahwa mem-parsial ini adalah sesuatu sampai aku melihatnya.Jika Anda ingin menginisialisasi array ke nilai selain 0,
gcc
Anda dapat melakukannya:Ini adalah perpanjangan GNU dari C99 Initializers yang Ditunjuk . Di GCC yang lebih lama, Anda mungkin perlu menggunakan
-std=gnu99
untuk mengkompilasi kode Anda.sumber
...
untuk menunjukkan rentang adalah ekstensi khusus-gcc.