是否可以在 C++ 中获得 CHAR 的有效十六进制地址?

Саш*_*аша 1 c++

我正在尝试获取 CHAR A4b5的有效内存地址,但是当我尝试使用十六进制编辑器访问该地址时,它没有读取我在编译后已在控制台输出中获得的地址。 十六进制编辑器正在验证地址为无效地址。

我的代码:

    #include <iostream>
using namespace std;
main ()
{
{   //INT
    cout << "INT" << '\n';
    int a = 2, b = 3;
    cout << "Result: " << "for " << "int a " << "= " << a << '\n';
    cout << "Result: " << "for " << "int a " << "= " << a << " " << "at " << "address " << &a << '\n';
    cout << "Result: " << "for " << "int b " << "= " << b << '\n';
    cout << "Result: " << "for " << "int b " << "= " << b << " " << "at " << "address " << &b << '\n';
    cout << "-----------------------------------------" << '\n';
}
{
    //SHORT
    cout << "SHORT" << '\n';
    short a = 2, b = 3;
    cout << "Result: " << "for " << "short a " << "= " << a << '\n';
    cout << "Result: " << "for " << "short a " << "= " << a << " " << "at " << "address " << &a << '\n';
    cout << "Result: " << "for " << "short b " << "= " << b << '\n';
    cout << "Result: " << "for " << "short b " << "= " << b << " " << "at " << "address " << &b << '\n';
    cout << "-----------------------------------------" << '\n';
}
{
    //FLOAT
    cout << "FLOAT" << '\n';
    float a = 2, b = 3.1;
    cout << "Result: " << "for " << "float a " << "= " << a << '\n';
    cout << "Result: " << "for " << "float a " << "= " << a << " " << "at " << "address " << &a << '\n';
    cout << "Result: " << "for " << "float b " << "= " << b << '\n';
    cout << "Result: " << "for " << "float b " << "= " << b << " " << "at " << "address " << &b << '\n';
    cout << "-----------------------------------------" << '\n';
}
{
//DOUBLE
    cout << "DOUBLE" << '\n';
    double a = 20, b = 30.1;
    cout << "Result: " << "for " << "double a " << "= " << a << '\n';
    cout << "Result: " << "for " << "double a " << "= " << a << " " << "at " << "address " << &a << '\n';
    cout << "Result: " << "for " << "double b " << "= " << b << '\n';
    cout << "Result: " << "for " << "double b " << "= " << b << " " << "at " << "address " << &b << '\n';
    cout << "-----------------------------------------" << '\n';
}
{
//CHAR
    cout << "CHAR" << '\n';
    char A4 = 'A' , b5 = 'B' ;
    cout << "Result: " << "for " << "Char A4 " << "= " << A4 << '\n';
    cout << "Result: " << "for " << "Char A4 " << "= " << A4 << " " << "at " << "address " << &A4 << '\n';
    cout << "Result: " << "for " << "Char b5 " << "= " << b5 << '\n';
    cout << "Result: " << "for " << "Char b5 " << "= " << b5 << " " << "at " << "address " << &b5 << '\n';
    cout << "-----------------------------------------" << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)

Ulr*_*rdt 7

查看operator<<流的重载列表。forchar const*假设在该地址处有一个以零结尾的字符串。你想要的是void const*. 对于其他类型的指针,该转换由编译器隐式完成,因为char您需要自己明确地进行转换:

cout << static_cast<void const*>(&b5) << endl;
Run Code Online (Sandbox Code Playgroud)