Je suis nouveau sur le langage de programmation c et les pointeurs d'apprentissage maintenant. J'ai besoin d'une petite clarification dans le moulage de pointeur.Quel est le résultat de la diffusion d'un pointeur sur un littéral de chaîne en tant que pointeur int?
#include<stdio.h>
int main(){
char *c = "hello";
for(int i = 0;i<5;i++)
printf("c:%c %d\n",c[i],c[i]);
int *ip = (int*)c;
printf("after casting");
printf("c:%d\n",*ip);
return 0;
}
OUTPUT:
c:h 104
c:e 101
c:l 108
c:l 108
c:o 111
after castingc:1819043176
Alors, quelle est cette valeur 1819043176? n'importe quelle valeur de poubelle ou il représente n'importe quoi. Dans ce programme, après avoir transtypé le pointeur char en pointeur entier. ce printf ("c:% d \ n", * ip); déclaration montre une valeur de l'IP comme 1819043176. Je ne peux pas comprendre quelle est cette valeur 1819043176
s'il vous plaît aidez-moi à comprendre. Je vous remercie.
Vous enfreignez la règle stricte d'alias, vous avez un comportement indéfini. –
Je vous suggère d'imprimer la valeur casted en tant que * hex * et de garder une [table ASCII] (http://en.cppreference.com/w/c/language/ascii) à proximité (ou simplement d'imprimer les caractères séparés en hexadécimal ainsi). –
Vous n'êtes pas vraiment autorisé à faire ce casting. Mais si vous convertissez 1819043176 en hexadécimal, vous obtenez '0x6C6C6568'. Étonnamment, ce sont les codes ASCII pour '' l''' '' '' '' '' '' '' '' '' '' et '' h''. Devinez d'où viennent ces valeurs. –