12

可能重复:
为什么不显示字符数据的地址?

这是代码和输出:

int main(int argc, char** argv) {

    bool a;
    bool b;

    cout<<"Address of a:"<<&a<<endl;
    cout<<"Address of b:"<<&b<<endl;

    int c;
    int d;

    cout<<"Address of c:"<<&c<<endl;
    cout<<"Address of d:"<<&d<<endl;

    char e;    
    cout<<"Address of e:"<<&e<<endl;

    return 0;
}

输出:

a地址:0x28ac67

b的地址:0x28ac66

c的地址:0x28ac60

d地址:0x28ac5c

e地址:

我的问题是:char的内存地址在哪里?为什么不打印?

谢谢你。

4

3 回答 3

16

C/C++ 中的字符串可以用 表示char*,类型与 相同&e。所以编译器认为你正在尝试打印一个字符串。如果要打印地址,可以转换为void*.

std::cout << static_cast<void *>(&e) << std::endl;
于 2012-11-23T20:19:48.370 回答
11

我怀疑 的重载char *版本ostream::operator<<需要一个以 NUL 结尾的 C 字符串——而你只传递了一个字符的地址,所以你在这里拥有的是未定义的行为。您应该将地址转换为 avoid *以使其打印您期望的内容:

cout<<"Address of e:"<< static_cast<void *>(&e) <<endl;
于 2012-11-23T20:20:05.640 回答
2

看看这个之前问过的问题:为什么不显示字符数据的地址?

此外,如果您使用printf("Address of e: %p \n", &e);它也可以。

于 2012-11-23T20:29:03.583 回答