J'ai besoin d'un grand tableau nul en C en tant que global. Existe-t-il un moyen de le faire en plus de taper
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Claudiu
la source
la source
char
etc, mais si vous voulez un tableau de pointeurs, vous devez les définir explicitement sur NULL, il n'y a (absurdement!) Aucune garantie que NULL est représenté comme zéro octet. Ceci même si le littéral0
représente implicitement le pointeur nul.Réponses:
Les variables globales et les variables statiques sont automatiquement initialisées à zéro. Si vous avez simplement
à portée globale, ce sera tous des zéros à l'exécution. Mais en fait, il existe une syntaxe abrégée si vous aviez un tableau local. Si un tableau est partiellement initialisé, les éléments non initialisés reçoivent la valeur 0 du type approprié. Vous pourriez écrire:
Le compilateur remplirait les entrées non écrites avec des zéros. Vous pouvez également utiliser
memset
pour initialiser le tableau au démarrage du programme:Cela serait utile si vous l'aviez modifié et que vous vouliez le réinitialiser à tous les zéros.
la source
character
. c'est uninteger
.{}
discussion: stackoverflow.com/questions/17589533/...memset
n'est évidemment pas correcte: je pense que cela ne fonctionne que pour 0: stackoverflow.com/questions/11138188/...-Werror=missing-braces
dans gcc, il doit être initialisé à{{0}}
. Si le premier élément struct est un autre struct alors{{{0}}}
et ainsi de suite. Voir stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};
... qui m'a amené ici. Je ne savais même pas que cette mise à zéro partielle était une chose jusqu'à ce que je la voie.Si vous souhaitez initialiser le tableau avec des valeurs autres que 0,
gcc
vous pouvez faire:Il s'agit d'une extension GNU des initialiseurs désignés C99 . Dans les anciens GCC, vous devrez peut-être utiliser
-std=gnu99
pour compiler votre code.la source
...
pour désigner une plage est une extension spécifique à gcc.