in ci peut ajouter est 'a' + 10 code> et il entraînera une réponse valide ... Pourquoi puis-je ajouter cela et pourquoi ne puis-je pas ajouter
"A" +10 code>? p>
'a' code> représente un entier en C et
"A" code> représente une constante de chaîne p>
3 Réponses :
Oui, "A" est un littéral à chaîne qui devient un tableau de charcuterie dans C. 'A' est en interne juste un nombre - la valeur ASCII de la lettre a em>. p>
"A" code> retourne un pointeur. Vous ne pouvez pas faire
"a" +10 code> car seulement 2 caractères sont alloués, mais vous pouvez faire
"thomas" +3 code>. Il retournera un pointeur sur le
M code>. P>
'A' code> retourne un numéro. Sur une machine à base d'ASCII, ce sera quatre-vingt-dix-sept pour être précis.
'A' + 5 code> retournera cent deux, qui est la même valeur renvoyée par
'e' code>. p>.
Les constantes de caractères en C ont type Par exemple, ce programme: P> int code>, donc
'A' + 10 code> ajoute simplement 10 à la valeur entière du caractère
'A' code > (probablement 97). (En C ++, les constantes de caractères sont de type
char code>, mais
char code> est toujours un type entier, donc
'a' + 10 code> est également valide dans C ++.)
"A" + 10 code> est plus compliqué.
"a" code> est de type
char [2] code> (1 pour le "A", plus 1 pour le caractère null qui termine la chaîne). Mais les expressions de tableau sont dans la plupart des contextes, implicitement converties en expressions de pointeur. Donc,
"A" + 10 code> effectue des arithmétiques du pointeur, produisant le résultat du
char * code>. Mais évaluer cette expression a un comportement indéfini, car il pointe après la fin de la matrice contenant
"a" code>. P>
lo, world
Dupliqué possible de personnage vs cordes en C
Vous peut i> ajouter un numéro à un
char * code>, mais il est un comportement indéfini si le pointeur résultant ne pointe pas dans l'objet pointé par l'original
char * code> ou juste au-delà.