我有一个指向int的指针。
int index = 3;
int * index_ptr = &index;
index_ptr
是类IndexHandler
的成员变量。
A类有一个std :: vector of IndexHandlers,Avector。 B类有一个指向IndexHandlers,Bvector的指针的std :: vector,我将其设置为指向A类向量中的项目,因此:
Bvector.push_back(Avector[i].GetPtr())
到目前为止我?
我想检查一下,当我在Bvector中解析指针并检索内部IndexHandlers index_ptr
时,它们指向与A类相同的index_ptr
......
如何检查它们是否指向相同的内存地址?... 如何打印两组指针所指向的值的地址?
答案 0 :(得分:3)
要打印int指针的地址和int指针指向的int值,请使用
printf("%p %i\n", ptr, *ptr);
答案 1 :(得分:2)
非迭代器方法将它们并排打印出来:
for (size_t i = 0; i < Avector.size(); i++)
{
std::cout << "Avector ptr:" << Avector[i].GetPtr() << ", Bvector ptr:" << Bvector[i] << std::endl;
}
这将打印出每个指针的指针值。
你应该注意一件事。如果IndexHandler中的指针指向IndexHandler中的值,那么如果向量调整大小,则它可能变为无效,并且如果在该索引处插入或删除项目,则指向索引上方任何内容的指针将失效。因此,保持指向向量中的项目通常是一个坏主意,如果你想这样做,那么最好使用std :: list容器(这不会使指向列表中项目的指针无效)您插入或删除新值)
答案 2 :(得分:1)
非常'C'的方法是使用printf。像这样:
printf("A = %p, B = %p", (void *)A, (void *)B);
以上假设A和B是指针类型。
答案 3 :(得分:1)
我如何检查他们是否指向 相同的内存地址?
if (index_ptr1 == index_ptr2)
{
// They point to the same address
}
else
{
// They don't
}
答案 4 :(得分:0)
在课堂内:
//from this to uint value
void* me=(void*)this;
uint* me_pAddress=(uint*)&me;
uint ThisAddress=*me_pAddress; //address value of 'this' pointer
//from uint value to this pointer
void*** me_ppAddress=(void***)&ThisAddress;
myClass* thisPointer=(myClass* )(*me_ppAddress);
thisPointer->myFunction();