如何获取指针指向的值的地址

时间:2009-06-03 12:08:02

标签: c++ pointers

我有一个指向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 ......

如何检查它们是否指向相同的内存地址?... 如何打印两组指针所指向的值的地址?

5 个答案:

答案 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();