2012-05-28 172 views
3

我对将数组赋给指针的理解是指针指向数组的第一个索引,所以当打印出指针时,它应该打印出数组的第一个索引的地址,但是如何在这种情况下打印出整个数组的值呢?尽管我明确表示,我想要的第一索引指向数组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 

的地址的第二个问题是,我看到这两条线之间的区别在于,一个是指针的阵列为char,另一种是一个指针到一个char数组,是否正确?括号是否必要?

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

foo的数组的地址应该是相同的为地址,是吗?我如何打印A的地址?因为我没有这样做。非常感谢

回答

6

<<有一个专门的过载const char *,因为这是一个C风格的字符串。试试这个:

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

谢谢,如果我把*** foo ***改成*** foo = {'A','B','C'} ***没有空终止符,它应该被视为一个字符数组而不是C字符串? –

+0

@ClintHui:不,因为内容不会影响类型。 –

+0

所以在C++中没有实际的char数组,所有都将被视为C-String?谢谢 –