【问题标题】:I was just expecting the char values to be printed.What is happening?我只是希望打印 char 值。发生了什么?
【发布时间】:2019-05-24 18:08:15
【问题描述】:

我期待的输出是 A B C D w x y z

是否与处理 cout 的顺序有关,我的意思是从左到右或从右到左。

#include <iostream>
using namespace std;
void dummy_func1() {
    char a = 'a';
    char b = 'b';
    char c = 'c';
    char d = 'd';
    cout<<&a<<" "<<&b<<" "<<&c<<" "<<&d<<endl;
}
char w = 'w';
char x = 'x';
char y = 'y';
char z = 'z';
void dummy_func2() {
    cout<<&w<<" "<<&x<<" "<<&y<<" "<<&z<<endl;
}
int main()
{
    dummy_func1();
    dummy_func2();
}

abcd bcd cd d

w xw yxw zyxw

【问题讨论】:

  • a代替&amp;a

标签: c++ char cout


【解决方案1】:

在将 char 值传递给 cout 时,您应该省略 &amp;

您实际上是在传递char*,而cout 将其解释为以空字符结尾的字符串。

您的程序没有崩溃的事实仅仅是因为 C 运行时恰好布局内存的方式。

如您所见,堆和堆栈内存中的值顺序是颠倒的,但这完全是偶然的,只有当您想深入了解 C/C++ 的内部时才会感兴趣。 :)

【讨论】:

  • "在将 char 值传递给 cout 时,您应该省略 &。您实际上是在传递 char* 并且 count 将其解释为字符串。"实际上我知道这一点,但想知道为什么当我打印 &a 时它打印的是 abcd。感谢您的澄清。您能否分享这个“堆内存和堆栈内存中的值顺序颠倒了,正如您所看到的,但这完全是偶然的,只有在您想深入了解 C/C++ 的内部时才感兴趣”
  • 据我所知,内存变量布局不是标准规定的,除非您将变量放在结构中。颠倒的顺序源于静态数据是预先分配的,并且堆栈向后增长。 eel.is/c++draft/basic.memobjusna.edu/Users/cs/aviv/classes/ic221/s16/lec/08/lec.html
猜你喜欢
  • 2011-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多