L’initialisation supprime les qualificateurs du type cible de pointeur

J’essaie d’imprimer la liste d’une liste à lien unique à laquelle j’ai fait référence dans le texte du lien . Cela fonctionne, mais je reçois les avertissements du compilateur:

Initialization discards qualifiers from pointer target type

(sur déclaration de départ = tête) et

return discards qualifiers from pointer target type

(sur l’instruction de retour) dans ce code:

 /* Prints singly linked list and returns head pointer */ LIST *PrintList(const LIST *head) { LIST *start = head; for (; start != NULL; start = start->next) printf("%15s %d ea\n", head->str, head->count); return head; } 

J’utilise XCode. Des pensées?

C’est cette partie:

 LIST *start = head; 

Le paramètre de la fonction est un pointeur sur une constante, const LIST *head ; cela signifie que vous ne pouvez pas changer ce que cela indique. Cependant, le pointeur ci-dessus est sur non-const; vous pouvez le déréférencer et le changer.

Il doit également être const :

 const LIST *start = head; 

La même chose s’applique à votre type de retour.


Tout ce que dit le compilateur, c’est: “Hé, vous avez dit à l’appelant” Je ne changerai rien “, mais vous ouvrez des opportunités pour cela.”

Dans la fonction suivante, obtenir l’avertissement que vous avez rencontré avec.

 void test(const char *str) { char *s = str; } 

Il y a 3 choix:

  1. Supprimez le modificateur const de param:

     void test(char *str) { char *s = str; } 
  2. Déclarez également la variable cible en tant que const:

     void test(const char *str) { const char *s = str; } 
  3. Utilisez un type converti:

     void test(const char *str) { char *s = (char *)str; }