如何获取C++类的成员变量的地址偏移
2018-11-03 本文已影响0人
太平小小草
- 这两天看到一个C++代码的例子,如下图,很不明白语法,尽管大致能猜出其意思,但是奇怪,c++中怎么可以这么用,因为之前完全没有这样用的概念。
#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。二,函数成员指针