对指针及其地址感到困惑

时间:2019-10-19 14:26:44

标签: c++ pointers

我已经在代码中创建了一些指针,但是结果却不是我期望的。

这是简单的代码:

int main(int argc, char const* argv[])
{
    int myInt = 23;
    int* ptr = &myInt;

    char* buffer = new char[8];
    memset(buffer, 0, 8);

    char** ptr2 = &buffer;

    std::cout << "ptr address is " << ptr << std::endl;
    std::cout << "buffer pointer is pointing to address " << buffer << std::endl;
    std::cout << "ptr2 pointer is pointing to address " << ptr2 << std::endl;
    std::cout << "Dereferencing ptr2 = " << *ptr2 << std::endl;
    return 0;
} 

这是运行代码的结果:

  

ptr地址为0x7ffde215a14c

     

缓冲区指针指向地址

     

ptr2指针指向地址0x7ffde215a150

     

取消引用ptr2 =

我想知道为什么不显示缓冲区指针地址,为什么对ptr2的取消引用也什么都没有显示,而指向缓冲区指针的指针(ptr2)却显示了该地址。这对我来说毫无意义。

1 个答案:

答案 0 :(得分:7)

<<的操作符为explicitly overloaded for all kinds of char*,将其打印为以终止的字符串。要打印指针,您需要对其进行投射:

std::cout << "buffer pointer is pointing to address " << reinterpret_cast<void*>(buffer) << std::endl;
相关问题