Erreur de compilation gcc: cast spécifie le type de tableau
Le code suivant est parfait valide,
int *ia = (int[]){1,3,5,7};
mais quand je compile à la prochaine ligne de code,
char *p = (char[]) "abc";
gcc dit
test.c:87: error: cast specifies array type
Il semble qu'ils sont projetées de la même manière. Pourquoi le deuxième en un, obtenez un message d'erreur?
Que vous les gars a dit, "abc" est un pointeur, ce qui ne peut pas être converti en un pointeur. Donc, mon autre question: pourquoi ne
char[] s = "abc";
est valide. Comment l'-dessus de la ligne de code lors de la compilation?
source d'informationauteur draw | 2010-08-06
Vous devez vous connecter pour publier un commentaire.
C'est valable parce que l'expression sur le côté droit est un C99 littéral composépas une fonte:
Cependant, ce n'est pas valable parce que c'est un fonte d'expressionpas un composé littérale. Que GCC est vous dire, vous ne pouvez pas lancer de types de tableau:
Vous pouvez résoudre le problème en faisant une bonne littéral composé - ils sont désignés par les accolades:
Le premier exemple n'est pas coulée, c'est la création de la matrice.
Et il y a une grande différence entre char[] et char* : le premier est le tableau lui-même et le second est un pointeur de tableau. Le suivant devrait fonctionner (pas sûr à 100%):
Ou
char *p = (char) {abc};
Réponse:
p est un pointeur vers le premier octet de l'adresse du tableau,
pas un tableau de type pointeur. Un tableau doit être initialisé avec des accolades {}
un char tableau est initialisé comme ceci:
mais peut être initialisé avec une chaîne
Maintenant, si arr adresse 0x10 et sa taille est de 3 octets alors:
donne l'adresse 0x13. ect, ect.
si vous prenez un des multiples dimensions de la matrice de l'adresse ' sont alignés.
à l'aide d'un pointeur sur le tableau comme un typedef
exemple:
"abc"
ne peut pas être converti en char tableau puisqu'il n'est pas un tableau à commencer par