代码之家  ›  专栏  ›  技术社区  ›  b.roth

在C++中,如何获取存储类实例字段值的地址?

  •  1
  • b.roth  · 技术社区  · 17 年前
    class A {
       public: int i;
    };
    
    A *a = new A();
    

    如何获取以下地址 a->i ?我试过了 &a->i 并且 &(a->i)

    “.i”的左侧必须具有类/结构/联合类型”

    6 回复  |  直到 17 年前
        1
  •  8
  •   Rob Kennedy    17 年前

    a->i 。以下是工作代码:

    #include <stdio.h>
    class A {
        public:
            int i;
    };
    
    int main() {
        A* a = new A();
        int* i = &a->i;
        printf("a: %p\na->i: %p\n", a, i);
        return 0;
    }
    

    a.i a 其中一种类型。您需要取消引用指针才能访问成员。

    $ ./a.out
    a: 40748
    a->i: 40748
    

    A

        2
  •  0
  •   stefanB    17 年前

    class A {
        public:         // note colon after public
            int i;
    };                  // note semicolon after bracket
    
    A *a = new A();     // note *a not a*
    

    cout << ios::hex << &a->i << endl;
    

        3
  •  0
  •   msvcyc    17 年前

    &

        4
  •  0
  •   Corey Ross    17 年前

    &a.i

    class A 
    {
       public: 
           int i;
    };
    
    ...
    
    A *a = new A();
    int *i = &a->i;
    
        5
  •  0
  •   Charles Ma    17 年前

    class A {
       public:
          int i;
    };
    int main() {
       A *a = new A();
       int *x = &a->i;
       return 0;
    }
    
        6
  •  0
  •   Beano    17 年前

    class A
    {
    public:
        int m_i;
    };
    
    int
    main()
    {
        A* a = new A();
        int* i_ptr = &(a->m_i);
    
        return 0;
    }
    

    A* a = ... A a* = ...