1
votes

Bonne façon d'imprimer l'adresse du tableau de caractères

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?


0 commentaires

3 Réponses :


1
votes

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 (le char ) lui-même en void * , 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]<<" ";
//           ^

0 commentaires

1
votes

Votre valeur d'impression convertie en void * , pour imprimer l'adresse, vous avez besoin de

cout<< static_cast<void*>(&a[i])<<" ";


0 commentaires

1
votes

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]) << " ";


0 commentaires