Je pensais que vous pourriez déclarer une matrice, puis plus tard l'initiez-la.
Comme si p>
6 Réponses :
Nope, vous ne pouvez que initialiser un tableau lorsque vous le déclarez d'abord. La raison en est que les tableaux ne sont pas des lvalues non modifiables.
Dans votre cas: P> Vous n'avez pas besoin de spécifier la taille, mais vous pouvez si vous le souhaitez. Cependant, la taille ne peut pas être inférieure à 3 dans ce cas. En outre, les trois chaînes sont écrites à la mémoire en lecture seule, alors quelque chose comme (1] [2] = 'c' code> pour changer le 2e "bla" sur "blch" entraînera normalement un segfault . p> p>
Plus précisément, les tableaux dans la plupart des contextes évaluent à des fins de renvoiement, pas de lvalues et de l'affectation à une rapalité n'est pas autorisée.
En fait, votre explication est probablement plus correcte. Édité mon post.
Tu as cru mal. L'initialisation n'est possible que à em> déclaration. Après cela, vous ne pouvez attribuer que des valeurs individuelles. P>
C'est une expression d'initialisateur. Ne peut pas avoir que le code entre les deux, doit être utilisé sur la ligne de déclaration. P>
Comme d'autres personnes ont dit que vous ne pouvez utiliser que des initialiseurs lorsque la variable est déclarée. Le moyen le plus proche de faire ce que vous voulez est:
char *myArray[3];
/* CODE INBETWEEN */
{
static const char *tmp[3] = {
"blah",
"blah",
"blah" };
memcpy(myArray, tmp, sizeof myArray);
}
Oui, vous pouvez déclarer un tableau puis l'initialiser ultérieurement.
Cependant, il y a une exception ici.
Vous déclarez un tableau POINTER POINTER B> (qui a fonctionné bien).
Et, alors vous êtes Instanciation des chaînes constantes pour les assigner au tableau b>.
C'est là que le problème commence. Ce que vous avez essayé aurait travaillé bien avec p> Il aide à noter qu'un pointeur de caractères et une instance de chaîne sont deux entités différentes; le premier peut pointer vers la seconde. p> p>
Les chaînes constantes ne sont que des primitives compilatrices qui ne reçoivent aucun emplacement de mémoire adressable dans la manière dont vous les avez utilisées. Ils peuvent être attribués directement au moment de l'initialisation de la matrice (comme Mike code> a montré); qui indiquera au compilateur de les affecter en tant que constantes disponibles au moment de l'exécution et permettra d'initialiser une initialisation lorsque la portée du myarray code> commence. p>
Dans votre exemple, vous n'initialisez pas les valeurs. Vous définissez simplement la valeur. Un optimiseur peut transformer ce que vous avez écrit à l'initialisation, mais il n'y a aucune garantie.
@Jaré, je vais prendre votre vote de descente et commenter dans l'esprit de la signification exacte de initialisation code>. Cependant, je ne pense pas que la question signifiait la Parole dans ce sens.
Ce n'est pas parfaitement clair que problème du monde réel em> vous essayez de résoudre, ici ... Je pensais que vous pourriez déclarer un tableau, P>
blockQuote> ... qui est possible de tant de façons, mais pour bien cette question, je souhaite vous concentrer sur la déclaration d'un tableau à l'intérieur d'un puis plus tard l'initiez-la. P>
comme si p>
blockQuote> techniquement parlant ceci est l'initialisation d'un tableau différent em> (dans un objet anonyme) suivi d'une affectation de l'ensemble du
struct code>. p> < Pré> xxx pré>
struct code>. Il pourrait em> être utile pour résoudre votre problème du monde réel em> (quoi que ce soit) ... mais j'espère que ce sera finalement utile pour quelqu'un d'autre plus tard pour savoir que vous pouvez attribuer struct code> s avec des tableaux à l'intérieur ... p> p>
Vous déclarez une gamme de pointeurs de caractères. Chaque pointeur devrait indiquer un tampon dynamique ou statique avant de pouvoir utiliser Strcpy () ou d'autres opérations de chaîne pour modifier le contenu.
Donc, je dois initialiser et déclarer en même temps?>