下面的指针指向什么?

问题描述 投票:0回答:1

您好,我只是想更好地理解指针。我正在摆弄指针和空指针,我编写了以下代码:

#include <iostream>
#include <vector>


int main()
{
    struct myStruct
    {
        std::vector<int> myVec;
    };
    
    myStruct* myStructPtr = new myStruct();
    
    myStructPtr->myVec.push_back(1);
    myStructPtr->myVec.push_back(2);
    myStructPtr->myVec.push_back(42);
    myStructPtr->myVec.push_back(24024);
    
    {
        int* arr = myStructPtr->myVec.data();
        std::cout << arr << std::endl;
    }
    
    {
        void* arr = reinterpret_cast<void*>(&myStructPtr->myVec); //what does this point to ?
        std::cout << arr << std::endl;
    }
    
    return 0;
}

当我通过在线 C++ 编译器运行它时,输出如下:

0x559c14a3bed0 0x559c14a3beb0

它们似乎相差 32 位。我知道

myVec.data()
返回指向用作元素存储的底层数组的指针,但是 void* arr 指针我不确定它真正指向什么?

c++ pointers
1个回答
0
投票

第一个arr指向向量数据在内存中所在的内存地址 第二个arr指向myVec对象的内存位置。

正确的类型应该是

auto vectorObject = &myStructPtr->myVec;

https://godbolt.org/z/4cchrYdhv

© www.soinside.com 2019 - 2024. All rights reserved.