我对将数组分配给指针的理解是,指针指向数组的第一个索引,因此当打印指针时,应该打印出数组第一个索引的地址。但是在这种情况下,为什么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的地址呢?因为我失败了。非常感谢。
void*
不是char*
,所以不能像char*
一样处理。 - Jonathan Wakely