O que os colchetes significam na inicialização do array em C?


85

Qual é o significado disso [0x3A]aqui? Eu só aprendi afirmações comoint a[2] = {1, 2};


Provavelmente é uma extensão do compilador que permite inicializar entradas de array específicas (em determinados índices) sem preencher o resto.
Alexey Frunze

Respostas:


81

Significa inicializar o n elemento -ésimo da matriz. O exemplo que você deu significa que:

Eles são chamados de "inicializadores designados" e, na verdade, fazem parte do padrão C99. No entanto, a sintaxe sem o =não é. A partir dessa página:

Uma sintaxe alternativa para isso, que está obsoleta desde o GCC 2.5, mas o GCC ainda aceita, é escrever [index]antes do valor do elemento, sem =.


41

De acordo com os documentos do GCC, isso é compatível com ISO C99. Eles se referem a ele como "Inicializadores designados":

Para especificar um índice de array, escreva `[index] = 'antes do valor do elemento. Por exemplo,

é equivalente a

Nunca vi essa sintaxe antes, mas apenas a compilei com o gcc 4.4.5, com -Wall. Compilou com sucesso e não deu avisos.

Como você pode ver nesse exemplo, ele permite inicializar elementos específicos do array, deixando os outros intocados.


15

Isso foi introduzido no C99 e é chamado de inicializador designado .

Basicamente, ele permite que você defina valores específicos em uma matriz com o resto deixado como padrão.

Nesse caso específico, os índices de matriz são os códigos de varredura do teclado. 0x3aé o código de varredura no conjunto # 1 (consulte a seção 10.6) para a CapsLockchave, 0x45é NumLocke 0x46 é ScrollLock.

No primeiro link acima, ele afirma que:

é equivalente a:

Curiosamente, embora o link indique que =é necessário, não parece ser o caso aqui.


13

É (perto de) a sintaxe dos inicializadores designados , um recurso C99.

Basicamente, ele inicializa partes de um array, por exemplo;

Inicializa o segundo valor da matriz para 6 e o ​​terceiro para 3.

No seu caso, os deslocamentos do array estão em hexadecimal (0x3a), o que inicializa o 58º elemento do array com o valor CAPSLOCK, que presumivelmente está definido no código acima do código que você está mostrando.

A versão em seu código sem o =parece ser uma extensão específica do gcc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.