对于一个学校的项目我们必须使用指针,为此我想看到记忆的地址,但...... 当我使用下一段代码时:
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;
}
并且输出可读:
有什么不同?
答案 0 :(得分:6)
这是因为您正在取消引用未初始化的指针。这是未定义的行为。
C ++标准库中的<<
运算符的一个重载将 char*
解释为C字符串,而不是指针。正确的C字符串未初始化,<<
运算符打印垃圾。 int*
没有类似的重载会将其解释为指针以外的任何内容,因此您会在第二种情况下看到正确的行为。
如果您不希望将char*
指针解释为C字符串,请将指针强制转换为void*
。
cout << hex << static_cast<void*>(pa) << endl;
(hex
允许您使用更传统的base-16表示法显示指针。