【问题标题】:Using & operator with char data type [duplicate]将 & 运算符与 char 数据类型一起使用 [重复]
【发布时间】:2012-12-09 15:21:28
【问题描述】:

可能重复:
Why is address of char data not displayed?

我正在尝试使用 & 运算符并被困在这个程序中:

#include<iostream>
using namespace std;

int main() {
    char i='a';
    cout<<&i;
    return 1;
}

我期望变量 i 的 地址 作为输出,但输出却是作为变量 i 的 本身。

谁能解释一下刚刚发生的事情?提前谢谢。

【问题讨论】:

  • 上述程序给出了 int、float、double 和 long 数据类型的预期输出。

标签: c++ visual-c++ addressof


【解决方案1】:

这是因为cout::operator&lt;&lt;const char* 有过载。你需要一个明确的演员来打印地址:

cout<<static_cast<void*>(&i);

这将调用带有void*作为参数的重载,这是用于打印地址的。

另请注意,您的代码会遇到未定义的行为。那里只有一个字符,并且重载需要一个以 null 结尾的 C 字符串。

【讨论】:

  • 我不同意这种行为是未定义的。移位运算符的行为与记录的完全一样,它是损坏的数据:)
  • @DimaRudnik 没有移位运算符。
  • 算子不就是这么叫的吗,左移?
  • @DimaRudnik 它没有移位,是吗?我称它为流运算符,但仔细想想,我不确定这就是名字。
  • @DimaRudnik 你是对的,它被称为左移运算符。我的错 :)。该行为未定义,因为cout 将继续打印,直到找到'\0',但您只拥有第一个char。读取下一个是非法的。
猜你喜欢
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多