与操作员混淆

confused with an operator

本文关键字:操作员      更新时间:2023-10-16

当我试图理解下面的代码时,我感到困惑。有人能解释这次黑客攻击吗:

a.*b

或者如果a是指向类的指针:

a->*b

这两个运算符都用于取消引用指向成员的指针。与常规指针不同,指向成员的指针不能自己取消引用,而是必须应用于该类型的实际对象。这些二进制运算符选择左手边的对象(或指针),并将指针应用于它的成员

struct test {
    int a, b, c;
};
int main() {
   int test::*ptr;
   ptr = &test::a;
   test t;
   t.*ptr = 5;         // set t.a to 5
   ptr = &test::b;
   test *p = &t;
   p->*ptr = 10;       // set t.b to 10 through a pointer
}