Necesito una gran matriz nula en C como global. ¿Hay alguna manera de hacer esto además de escribir?
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Claudiu
fuente
fuente

charetc., pero si desea una matriz de punteros, debe establecerlos explícitamente en NULL, no hay (¡absurdamente!) Ninguna garantía de que NULL se represente como cero bytes. Esto a pesar de que el literal0implícitamente representa el puntero nulo.Respuestas:
Las variables globales y las variables estáticas se inicializan automáticamente a cero. Si tienes simplemente
a escala global, todos serán ceros en tiempo de ejecución. Pero en realidad no es una sintaxis abreviada si has tenido una matriz local. Si una matriz se inicializa parcialmente, los elementos que no se inicializan reciben el valor 0 del tipo apropiado. Podrías escribir:
El compilador llenaría las entradas no escritas con ceros. Alternativamente, podría usar
memsetpara inicializar la matriz al inicio del programa:Eso sería útil si lo hubiera cambiado y quisiera restablecerlo a todos los ceros.
fuente
character. se trata de unainteger.{}discusión: stackoverflow.com/questions/17589533/…memsetno es obviamente correcto: creo que solo funciona para 0: stackoverflow.com/questions/11138188/…-Werror=missing-bracesen gcc, debe inicializarse en{{0}}. Si el primer elemento de estructura es otra estructura, entonces,{{{0}}}etc. Ver stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};... que me trajo aquí. Ni siquiera sabía que esta reducción a cero parcial era una cosa hasta que lo vi.Si desea inicializar la matriz a valores distintos de 0,
gccpuede hacer lo siguiente:Esta es una extensión de GNU de los inicializadores designados C99 . En GCC anteriores, es posible que deba usar
-std=gnu99para compilar su código.fuente
...para denotar un rango es una extensión específica de gcc.