【问题标题】:For a char d, I get strange output when executing cout << &d [duplicate]对于 char d,执行 cout << &d [重复] 时出现奇怪的输出
【发布时间】:2019-02-04 14:07:03
【问题描述】:

我刚开始学习 c++,我真的不明白,为什么当我 cout &d 时,它显示 char d 的次数与我已经显示的次数一样多 + 加 1 次。 所以它在这里显示了 3 次字符“d”...对于线路
cout

如果有人能用简单的话解释我为什么,我会感谢他。 如果这个问题很愚蠢,我很抱歉。

#include <iostream>
using namespace std;

int main() 
{

char d('d');

cout << d << endl;
cout << d << endl;
cout << &d << endl;


    return 0;   
}

【问题讨论】:

  • 当您使用地址运算符&amp; 时,您将获得一个指向您获得地址的变量的指针。如果变量是char 类型,那么指向它的指针将是char * 类型。这是空终止字节 strings. 的常见类型
  • 应该重新打开。这个问题不是关于为什么我看不到地址,而是关于多余的字符是从哪里来的,以及为什么当你更改单个字符时它们会改变。

标签: c++ char cout ampersand addressof


【解决方案1】:

这是因为&amp;(在此上下文中)是地址运算符。

编辑:正如@MSalters 所指出的,C++ 标准将此视为未定义行为,因此任何事情都可能发生,但大多数当前编译器将执行以下操作:

因此,您实际上是将指向char 的指针传递给cout.operator&lt;&lt;()。这被视为 C 风格的字符串,并将打印该内存地址处的所有内容,直到下一个 \0 nul 字符。您的 'd' 由您的 char 初始化放置在那里。其余的几乎是随机的,然后是内存中的内容。

【讨论】:

  • 技术上这是未定义的行为。你甚至不能依赖它自己打印'd'std::cout 在构造要打印的字符串之前很可能会因访问冲突而崩溃。
  • 好点@MSalters,添加到答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多