2012-05-28 6 views
3

Ma compréhension de l'affectation d'un tableau à un pointeur est que le pointeur pointe sur le premier index du tableau, donc lors de l'impression du pointeur, il devrait imprimer l'adresse du premier index du tableau, mais comment dans ce cas le cout a imprimé la valeur de tout le tableau? même si je explicitement indiqué que je voulais l'adresse du premier indicepointeur vers tableau C++

char foo[] = {'A','B','C','\0'}; 
char* p = foo; 
char* q = &(foo[0]); 
cout <<"from p: " << p << endl; 
cout << "from q: " << q << " " << &(foo[0]) << endl; 

//output 
from p: ABC 
from q: ABC ABC 

la deuxième question est que je vois la différence entre ces deux lignes est que l'on est un tableau de pointeur vers un char, l'autre est un pointeur à un tableau char, est-ce correct? la parenthèse est-elle nécessaire?

char* bar1[4]; 
char (*bar2)[4] = &foo; 
cout << "address of foo is " << bar2 << endl; 
//output 
address of foo is 0x7fff192f88b0 

L'adresse du tableau de foo devrait être la même que l'adresse de A, non? Comment imprimer l'adresse de A? puisque je n'ai pas réussi à le faire. Merci beaucoup

Répondre

6

<< a une surcharge dédiée pour const char *, parce que c'est ce qu'est une chaîne de style C. Essayez ceci:

cout << static_cast<const void *>(bar2) << endl; 
+0

Merci, et si j'ai changé le *** foo *** en *** foo = {'A', 'B', 'C'} *** sans le terminateur nul , il devrait être traité comme un tableau char au lieu de C-string à droite? –

+0

@ClintHui: Non, car le contenu n'affecte pas le type. –

+0

donc il n'y a pas de tableau char en C++, tout sera traité comme C-String? Merci –

Questions connexes