Bagaimana cara menginisialisasi array ke 0 di C?

170

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... */ };

?

Claudiu
sumber
26
char ZEROARRAY [1024] = {0};
3
Jika Anda perlu mengalokasikan memori pada heap, Anda juga dapat menggunakan calloc (). Misalnya char * zeroarray = calloc (1024, sizoef (* zeroarray)); .
Andrei Ciobanu
2
NB calloc baik untuk chardll, 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 meskipun 0secara literal secara implisit mewakili pointer nol.
Adrian Ratnapala
Kemungkinan rangkap dari Cara menginisialisasi array di C
AechoLiu

Jawaban:

284

Variabel global dan variabel statis secara otomatis diinisialisasi ke nol. Jika sudah sederhana

char ZEROARRAY[1024];

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:

char ZEROARRAY[1024] = {0};

Kompiler akan mengisi entri yang tidak tertulis dengan nol. Atau Anda dapat menggunakan memsetuntuk menginisialisasi array pada saat startup program:

memset(ZEROARRAY, 0, 1024);

Itu akan berguna jika Anda telah mengubahnya dan ingin mengatur ulang kembali ke semua nol.

John Kugelman
sumber
2
{0}; berfungsi dengan baik, C99 [$ 6.7.8 / 21] Jika ada lebih sedikit inisialisasi dalam daftar kurung kurawal daripada ada elemen atau anggota agregat, atau lebih sedikit karakter dalam string literal yang digunakan untuk menginisialisasi array ukuran yang diketahui daripada ada elemen dalam array, sisa agregat harus diinisialisasi secara implisit sama dengan objek yang memiliki durasi penyimpanan statis
Sasha Zezulinsky
Silakan merujuk ke: 0 yang diinisialisasi bukan a character. itu adalah integer.
Yonggoo Noh
1
{}diskusi: stackoverflow.com/questions/17589533/… memset tidak jelas benar: Saya pikir itu hanya berfungsi untuk 0: stackoverflow.com/questions/11138188/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Jika ini adalah array struct, dan menggunakan -Werror=missing-bracesdalam gcc, harus diinisialisasi ke {{0}}. Jika elemen struct pertama adalah struct lain maka {{{0}}}dan seterusnya. Lihat stackoverflow.com/questions/5434865/…
Tor Klingberg
1
Hari ini aku menemukan yang aneh ... int arr[256]={1,2,7,{0}};... yang membawaku ke sini. Aku bahkan tidak tahu bahwa mem-parsial ini adalah sesuatu sampai aku melihatnya.
Neil Gatenby
32

Jika Anda ingin menginisialisasi array ke nilai selain 0, gccAnda dapat melakukannya:

int array[1024] = { [ 0 ... 1023 ] = -1 };

Ini adalah perpanjangan GNU dari C99 Initializers yang Ditunjuk . Di GCC yang lebih lama, Anda mungkin perlu menggunakan -std=gnu99untuk mengkompilasi kode Anda.

Deqing
sumber
14
Inisialisasi yang ditunjuk adalah standar dalam C99. Penggunaan ...untuk menunjukkan rentang adalah ekstensi khusus-gcc.
Keith Thompson
1
Itu bukan penginisialisasi C99 yang ditunjuk, ini adalah penginisialisasi kisaran khusus GCC . Mengapa berkonsultasi dengan manual GCC daripada standar C99?
Craig Barnes