奇怪的控制台输出

时间:2012-03-04 13:34:14

标签: c++ visual-studio-2010 character-encoding console

对于一个学校的项目我们必须使用指针,为此我想看到记忆的地址,但...... 当我使用下一段代码时:

int _tmain(int argc, _TCHAR* argv[]){
  char a;
  char b;
  char * pa;
  char * pb;
  pa = &a;
  pb = &b;

  cout << "adress pa "<< pa <<endl;
  cout << "adress pb "<< pb <<endl;

  cout << "a is  " << a << endl;
  cout << "b is  " << b << endl;

我得到这个作为输出: enter image description here

这是一个角色问题,最重要的是我可以纠正这个吗?

我测试了另一段代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{int x = 25;
int * p;
p = &x;
cout << "adres" << p << endl;
*p = 10;
cout << "x"<< x << endl;
cin.get();

    return 0;
}

并且输出可读: enter image description here

有什么不同?

1 个答案:

答案 0 :(得分:6)

这是因为您正在取消引用未初始化的指针。这是未定义的行为。

C ++标准库中的<<运算符的一个重载 char*解释为C字符串,而不是指针。正确的C字符串未初始化,<<运算符打印垃圾。 int*没有类似的重载会将其解释为指针以外的任何内容,因此您会在第二种情况下看到正确的行为。

如果您不希望将char*指针解释为C字符串,请将指针强制转换为void*

cout << hex << static_cast<void*>(pa) << endl;

hex允许您使用更传统的base-16表示法显示指针。