C++如何打印一个字符的地址
2017-03-10 23:04
351 查看
#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;
上述代码输出的地址相同,都是内存的低地址。
相关文章推荐
- 【笔记】c c++如何打印变量地址
- C++ -- 如何取得一个给定的地址所存放的值
- 如何判断一个C++对象是否在堆上(通过GetProcessHeaps取得所有堆,然后与对象地址比较即可),附许多精彩评论
- C++ 一个问题:每次读取一个字符存入一个string中,最少读取100个字符,应该如何提高程序的性能?(C++ Primer 9.37 习题)
- 如何判断一个C++对象是否在堆栈上(通过VirtualQuery这个API来获取堆栈的起始地址,然后就可以得到答案了),附许多精彩评论
- 算法3:给一个字符数组(a-z),如何打印该数组成员构成集合的全部子集合
- 如何打印一个变量指定部分的字符
- C++ 如何从string中删除一个字符?
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别|\\在C++的字符串中才表示一个打印字符\
- c++中如何打印字符串的地址
- 【c++】c++中如何打印字符串的地址
- c++如何判断一个字符串是否只有可见字符
- 第四题:如果一个字符数组中有重复的字符 如"abbcd" 那么如何编程打印其全排列
- 如何统计出某个字段里的一个特定字符出现的次数?
- c中如何打印函数调用堆栈? - C/C++ - ChinaUnix.net
- 一道C++面试题,只能修改或者增加一个字符,给出至少三种修改方案
- 【C/C++】:如何获得一个float数的小数位数?
- 如何成为一个C++高级程序员
- 如何在同一个程序中混合使用C++和C
- 如何用C语言获得本机IP地址?(获取一个ip或者获取所有ip)