6
votes

Pourquoi char * peut contenir un seul caractère en C?

Cela pourrait sembler trop fou mais je viens de penser. En C Pourquoi

char *pc = 'H';      // single character
char *ps = "hello";  // a string


4 commentaires

Je ne pense pas char * pc = 'h' fait ce que vous pensez.


Si vous avez essayé printf ("% s", PC); , des choses très intéressantes pourraient arriver. Probablement soit une production de déchets ou un crash.


Écoutez vos avertissements ou augmentez votre niveau d'avertissement.


Toujours utiliser: g ++ -wall . Cela vous aidera à enregistrer des erreurs d'exécution comme celle que votre code provoque probablement ...


4 Réponses :


10
votes

It peut détenir un char car il existe une conversion implicite de char sur char * (via < Code> int ), et parce que Tailleof (Char *)> = Tailleof (Char) . Vous ne devriez pas le faire, cependant (techniquement, il s'agit d'un comportement indéfini car la valeur numérique littérale d'un caractère n'est probablement pas une adresse de pointeur valide à un type char ) .

et dans de nombreux compilateurs, ce fait générer un avertissement: xxx


0 commentaires

3
votes

dans xxx

'h' en tant que int sera casse sur un char * et Sera utilisé pour initialiser pc , le compilateur doit donner un avertissement à ce sujet.

in xxx

évaluera à son adresse de base, qui sera utilisé pour initialiser ps .


0 commentaires

0
votes

Lorsque je compile les lignes de code ci-dessus à l'aide de g ++, je reçois l'avertissement suivant:

test-12.c:1:12: warning: initialization makes pointer from integer without a cast [enabled by default]


0 commentaires

3
votes
const char *ps = "hello";

0 commentaires