如何获取C++类的成员变量的地址偏移

2018-11-03  本文已影响0人  太平小小草
#include "stdafx.h"
#include <iostream>
using namespace std;
struct X{
    int a;
    int b;
};

#define VALUE_OF_PTR(p) (*(long*)&p)

int main(){

    int X::*p = 0;
    p = &X::a;   //等价于int* p = &((X*)0)->a;
    p = &X::b;   //等价于int* p = &((X*)0)->b;
    return 0;
}

一,数据成员指针

这其中,如果把 p = &X::a; 这句改写成 p = &(X::a); 或者 p = (&X)::a;,编译器都会报错,我用的编译器是 微软VS2010。

上面main()函数里的几句话,稍作验证很容易知道其含义。
int X::*p = 0; 的含义是,定义一个结构体内部的指针,该指针用于接收”结构体内部变量“相对于”结构体起始地址“的偏移地址。
p = &X::a; 的含义是,将结构体中的变量a相对于结构体起始地址的偏移地址付给p。
p = &X::b;含义是,将结构体中的变量b相对于结构体起始地址的偏移地址付给p。

二,函数成员指针

上一篇下一篇

猜你喜欢

热点阅读