J'ai un morceau de code C qui ressemble à ceci:coulée pointeur vide const tableau de pointeurs const char correctement dans C
const char (*foo)[2] = bar();
maintenant bar()
est une fonction qui renvoie une (const void *)
. Comment puis-je diffuser correctement ce pointeur const
? Le code produit cet avertissement GCC:
"initialization discards qualifiers from pointer target type".
Voici quelques-unes de mes tentatives infructueuses:
const char (*foo)[2] = (const char *)bar();
const char (*foo)[2] = (const void **)bar();
Le code original fonctionne, je ne peux pas me débarrasser des avertissements par coulée correctement la valeur de retour.
EDIT: Ceci a été suggéré:
const char (*foo)[2] = (const char (*)[2])bar();
Il semble correct, mais GCC donne cet avertissement:
"cast discards qualifiers from pointer target type"
qui est presque identique à l'avertissement d'origine.
EDIT 2: OK, je pense que je l'ai. Le vrai problème ici est la définition (const void *)
de bar()
. Le const
dans la définition (const char(*)[2])
fait référence aux éléments du tableau, pas le pointeur vers le tableau. Cette définition de type est essentiellement un tableau qui, lorsqu'il est représenté par un pointeur void
, est et nonconst
. La vraie réponse est qu'un (const void *)
perd son cons
t-ness lorsqu'il est converti en (const char (*)[2])
.
Le titre de votre question indique "tableau de pointeurs char char", mais votre devoir est de pointer vers un tableau de deux caractères. Pouvez-vous clarifier exactement quelle barre est censée revenir? –
Quelle version de gcc et quelles options d'avertissement utilisez-vous? –
GCC 4.4.1 avec -Wall – postfuturist