Donc, j'ai récemment creusé dans les tableaux de caractères, et j'essaye d'imprimer l'adresse de chaque élément d'un tableau de caractères.
0x69 ice i
0x63 ce c
0x65 e e
test.cpp: In function âint main()â:
test.cpp:29:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
cout<<(void*)a[i]<<" ";
^
Le code ci-dessus me donne la sortie suivante:
char a[4] = {'i','c','e','\0'};
for(int i = 0; i < 3; ++i){
cout<<(void*)a[i]<<" ";
cout<<&a[i]<<" ";
cout<<a[i]<<endl;
}
Je ne suis pas à l'aise avec la sortie de (void *) a [i] . Les adresses des caractères ne devraient-elles pas être séparées de 1 octet. Je vois 0x69 suivi de 0x63 puis de 0x65 . Y at-il une raison à cela. Et y a-t-il une relation entre la représentation de l'adresse et le signe d'avertissement qu'elle affiche?
3 Réponses :
J'essaye d'imprimer l'adresse de chaque élément d'un tableau de caractères
(void *) a [i]est en train de convertir l'élément (lechar) lui-même envoid *, pas l'adresse du élément.Vous devriez obtenir l'adresse de chaque élément comme suit:
cout<<static_cast<void*>(&a[i])<<" ";Ou mieux utiliser
static_cast. p >cout<<(void*)&a[i]<<" "; // ^
Votre valeur d'impression convertie en void * , pour imprimer l'adresse, vous avez besoin de
cout<< static_cast<void*>(&a[i])<<" ";
Actuellement, vous ne recevez pas les adresses. Vous convertissez plutôt les valeurs ASCII des caractères en void * . C'est pourquoi les valeurs ne sont pas correctes.
Ce que vous voulez faire est d'utiliser un static_cast et d'obtenir l'adresse de l'élément & a [i] : p >
cout << static_cast<void*> (&a[i]) << " ";