输出如下:
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;上述代码输出的地址相同,都是内存的低地址。
