首页 文章

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

提问于
浏览
2

我有一个指向int的指针 .

int index = 3;
int * index_ptr = &index;

index_ptr 是类 IndexHandler 的成员变量 .

A类有一个IndexHandlers的std :: vector,Avector . B类有一个指向IndexHandlers,Bvector的指针的std :: vector,我将其设置为指向A类向量中的项目,因此:

Bvector.push_back(Avector[i].GetPtr())

和我一起到目前为止?

我想检查一下,当我在Bvector中解析指针,并检索内部IndexHandlers index_ptr 时,它们指向与A类相同的 index_ptr ...

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

5 回答

  • 2

    要打印int指针的地址和int指针指向的int值,请使用

    printf("%p %i\n", ptr, *ptr);
    
  • 3

    一个非常'C'的方法是使用printf . 像这样:

    printf("A = %p, B = %p", (void *)A, (void *)B);
    

    上面假设A和B是指针类型 .

  • 1

    我如何检查它们是否指向相同的内存地址?

    if (index_ptr1 == index_ptr2)
    {
      // They point to the same address
    }
    else
    {
      // They don't
    }
    
  • 0

    非迭代器方法将它们并排打印出来:

    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容器(这不会使指向列表中项目的指针无效)您插入或删除新值)

  • 1

    在课堂内:

    //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();
    

相关问题