C++中的指向数组的指针

3

我对将数组分配给指针的理解是,指针指向数组的第一个索引,因此当打印指针时,应该打印出数组第一个索引的地址。但是在这种情况下,为什么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

第二个问题是,我看到这两行的不同之处在于一个是指向字符指针的数组,另一个是字符数组的指针,这是正确的吗?圆括号是否必要?
 char* bar1[4];
 char (*bar2)[4] = &foo;
 cout << "address of foo is  " << bar2  << endl;
 //output
 address of foo is  0x7fff192f88b0

foo数组的地址应该与A的地址相同,对吗?我该如何打印出A的地址呢?因为我失败了。非常感谢。

1个回答

6

<<针对const char *有专门的重载,因为这就是C风格字符串。尝试这样做:

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

谢谢,如果我将 foo 改为 foo={'A','B','C'} 而没有空终止符,那么它应该被视为字符数组而不是 C 字符串,对吗? - Cong Hui
@ClintHui:不会,因为内容不影响类型。 - Oliver Charlesworth
谢谢,有没有一种方法可以显式地打印出A的地址?谢谢,因为***<<***被重载了。 - Cong Hui
@ClintHui:请查看我回答中的示例。 - Oliver Charlesworth
很明显,void*不是char*,所以不能像char*一样处理。 - Jonathan Wakely
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接