-2
votes

Type de coulée et d'addition

in ci peut ajouter 'a' + 10 et il entraînera une réponse valide ... Pourquoi puis-je ajouter cela et pourquoi ne puis-je pas ajouter "A" +10 ?

est 'a' représente un entier en C et "A" représente une constante de chaîne


2 commentaires

Dupliqué possible de personnage vs cordes en C


Vous peut ajouter un numéro à un char * , mais il est un comportement indéfini si le pointeur résultant ne pointe pas dans l'objet pointé par l'original char * ou juste au-delà.


3 Réponses :


2
votes

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 .


0 commentaires

0
votes

"A" retourne un pointeur. Vous ne pouvez pas faire "a" +10 car seulement 2 caractères sont alloués, mais vous pouvez faire "thomas" +3 . Il retournera un pointeur sur le M .

'A' retourne un numéro. Sur une machine à base d'ASCII, ce sera quatre-vingt-dix-sept pour être précis. 'A' + 5 retournera cent deux, qui est la même valeur renvoyée par 'e' . .


0 commentaires

0
votes

Les constantes de caractères en C ont type 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>

Par exemple, ce programme: P>

lo, world


0 commentaires