带有字符数组的c++ &运算符

c++ ampersand operator with char arrays

本文关键字:c++ 运算符 数组 字符      更新时间:2023-10-16

当我对我正在测试的这段代码感到困惑时,我只是在玩指针和数组。

#include <iostream>
using namespace std;
int main(void) {
    char a[] = "hello";
    cout << &a[0] << endl;
    char b[] = {'h', 'e', 'l', 'l', 'o', ''};
    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的前两种情况,'&'给出了整个字符串还是我在这里缺少了一些东西?

因为coutoperator <<打印一个字符串,如果你传递一个char*作为参数,这就是&a[0]。如果要打印地址,必须显式地将其强制转换为void*:

cout << static_cast<void*>(&a[0]) << endl;

还是

cout << static_cast<void*>(a) << endl;