当我对我正在测试的这段代码感到困惑时,我只是在玩指针和数组。
#include <iostream>
using namespace std;
int main(void) {
char a[] = "hello";
cout << &a[0] << endl;
char b[] = {'h', 'e', 'l', 'l', 'o', '\0'};
cout << &b[0] << endl;
int c[] = {1, 2, 3};
cout << &c[0] << endl;
return 0;
}
我预计这将打印三个地址(a [0],b [0]和c [0]的地址)。但结果是:
hello
hello
0x7fff1f4ce780
为什么前两个案例有char,'&amp;'给出了整个字符串,或者我在这里遗漏了什么?
答案 0 :(得分:10)
因为cout
的{{1}}打印了一个字符串,如果你传递一个operator <<
作为参数,那就是char*
。如果您要打印地址,则必须明确地将其转换为&a[0]
:
void*
或只是
cout << static_cast<void*>(&a[0]) << endl;