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

    xiaoxiao2021-03-25  141

    #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;

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

    转载请注明原文地址: https://ju.6miu.com/read-18011.html

    最新回复(0)