美文网首页
如何获取C++类的成员变量的地址偏移

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

作者: 太平小小草 | 来源:发表于2018-11-03 15:35 被阅读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。

    二,函数成员指针

    相关文章

      网友评论

          本文标题:如何获取C++类的成员变量的地址偏移

          本文链接:https://www.haomeiwen.com/subject/xkacxqtx.html