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
char
etc., 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 literal0
implí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
memset
para 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/…memset
no es obviamente correcto: creo que solo funciona para 0: stackoverflow.com/questions/11138188/…-Werror=missing-braces
en 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,
gcc
puede hacer lo siguiente:Esta es una extensión de GNU de los inicializadores designados C99 . En GCC anteriores, es posible que deba usar
-std=gnu99
para compilar su código.fuente
...
para denotar un rango es una extensión específica de gcc.