当我对我正在测试的这段代码感到困惑时,我只是在玩指针和数组.
#include <iostream> using namespace std; int main(void) { char a[] = "hello"; cout << &a[0] << endl; char b[] = {'h','e','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,’&’给出了整个字符串或者我在这里遗漏了什么?
解决方法
因为cout的运算符<<如果你传给一个char *作为参数,那就打印一个字符串,这就是& a [0].如果要打印地址,则必须明确将其转换为void *:
cout << static_cast<void*>(&a[0]) << endl;
要不就
cout << static_cast<void*>(a) << endl;