Eu preciso de uma grande matriz nula em C como um global. Existe alguma maneira de fazer isso além de digitar
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Claudiu
fonte
fonte
char
etc, mas se você quiser uma matriz de ponteiros, defina-os explicitamente para NULL, não há (absurdamente!) Nenhuma garantia de que NULL seja representado como zero-bytes. Isso mesmo que o literal0
represente implicitamente o ponteiro nulo.Respostas:
Variáveis globais e variáveis estáticas são automaticamente inicializadas em zero. Se você simplesmente
no escopo global, serão todos os zeros em tempo de execução. Mas na verdade não é uma sintaxe abreviada se você tivesse um array local. Se uma matriz for parcialmente inicializada, os elementos que não foram inicializados receberão o valor 0 do tipo apropriado. Você pode escrever:
O compilador preencheria as entradas não escritas com zeros. Como alternativa, você pode usar
memset
para inicializar a matriz na inicialização do programa:Isso seria útil se você o tivesse alterado e desejasse redefini-lo para todos os zeros.
fonte
character
. é uminteger
.{}
discussão: stackoverflow.com/questions/17589533/…memset
não está obviamente correto: Eu acho que só funciona para 0: stackoverflow.com/questions/11138188/…-Werror=missing-braces
no gcc, deve ser inicializado como{{0}}
. Se o primeiro elemento struct for outro, então{{{0}}}
e assim por diante. Veja stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};
... que me trouxe aqui. Nem sabia que esse zeramento parcial era uma coisa até que eu vi.Se você deseja inicializar a matriz com valores diferentes de 0,
gcc
faça o seguinte:Esta é uma extensão GNU dos C99 Designated Initializers . No GCC mais antigo, pode ser necessário
-std=gnu99
compilar seu código.fonte
...
para indicar um intervalo é uma extensão específica do gcc.