C++如何打印一个字符的地址

来源:互联网 发布:数据有效性下拉日期 编辑:程序博客网 时间:2024/06/05 02:57
#include<iostream>using namespace std;int main(){    int x = 1;    int* p_int = &x;    cout << &x << " " << p_int << endl;      char ch = '1';    char* p_char = &ch;    cout << &ch << " " << p_char << endl;    return 0;}

输出如下:

006FF9FC 006FF9FC
1烫烫烫烫o 1烫烫烫烫o

  对于一个int类型,通过指向它的指针或直接&进行取地址,可以很轻松的输出其地址。但是对于char类型,输出的内容竟然是乱码,查阅资料发现:C++标准库中I/O类对输出操作符<<重载,在遇到字符型指针时会将其当做字符串名来处理,输出指针所指的字符串。
  由此对于上面这个问题有两种解决方案:
  (1)使用C的格式化输出

printf("%x\n", p_char);printf("%x\n", &ch);

  (2)强制char *转换成void *

cout << static_cast<void*>(p_char) << endl;cout << static_cast<void*>(&ch) << endl;

一块连续的内存,从低地址到高地址,输出的内存地址是其低地址。这块区域的内存保存的内容是一样的,区别就是我们以何种数据类型去解释它(从C的malloc就可以看出)。

int x = 1;int* p = &x;char* pp = (char*)p;cout << p << endl;cout << static_cast<void*>(p) << endl;

上述代码输出的地址相同,都是内存的低地址。

1 0