您好,我只是想更好地理解指针。我正在摆弄指针和空指针,我编写了以下代码:
#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 指针我不确定它真正指向什么?
第一个arr指向向量数据在内存中所在的内存地址 第二个arr指向myVec对象的内存位置。
正确的类型应该是
auto vectorObject = &myStructPtr->myVec;