指向数组c ++的指针

Con*_*Hui 3 c++

我对将数组赋给指针的理解是指针指向数组的第一个索引,所以当打印出指针时,它应该打印出数组的第一个索引的地址,但是在这种情况下怎么会出现cout打印出整个数组的值?即使我明确表示我想要第一个索引的地址

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
Run Code Online (Sandbox Code Playgroud)

第二个问题是我看到这两行之间的区别在于,一个是指向char的指针数组,另一个是指向char数组的指针,这是正确的吗?括号是必要的吗?

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

foo数组的地址应该与A的地址相同,对吧?如何打印出A的地址?因为我没有这样做.非常感谢你

Oli*_*rth 6

<<有一个专用的重载const char *,因为这是一个C风格的字符串.试试这个:

cout << static_cast<const void *>(bar2) << endl;
Run Code Online (Sandbox Code Playgroud)