对于一个学校项目,我们必须使用指针,为此我想查看内存的地址,但是...... 当我使用下一段代码时:
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;
我得到这个作为输出:
这是字符集问题吗?最重要的是我可以更正吗?
我测试了另一段代码:
#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;
}
并且输出是可读的:
有什么不同?
最佳答案
这是因为您正在取消引用未初始化的指针。这是未定义的行为。
<<
的重载之一C++ 标准库中的运算符解释 char*
作为 C 字符串,而不是指针。因为您的 C 字符串未初始化,<<
运算符(operator)打印垃圾。 int*
没有类似的重载这会将它解释为指针以外的任何东西,因此您会在第二种情况下看到正确的行为。
如果您不想要您的 char*
要解释为 C 字符串的指针,请将指针指向 void*
.
cout << hex << static_cast<void*>(pa) << endl;
(hex
让您可以使用更传统的 base-16 表示法显示指针。
关于c++ - 奇怪的控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555299/