📅  最后修改于: 2023-12-03 14:59:00.728000             🧑  作者: Mango
在C++中,箭头运算符 ->
通常用于访问对象成员的指针。而当它与星号 *
结合使用,即形如 ->*
的时候,它可以用于访问指向指针成员的指针。
->*
运算符的语法如下:
pointer_to_pointer ->* pointer_to_member
其中,pointer_to_pointer
是一个指向指针的指针,而 pointer_to_member
是一个指向该指针所指对象的成员的指针。
当我们需要通过一个指针来访问它所指对象的成员时,可以使用箭头运算符 ->
。例如:
struct Person {
int age;
};
Person person;
Person *p = &person;
p->age = 20; // 使用箭头运算符来访问 age 成员
而当我们想访问一个指向指针的指针的成员时,就可以使用 ->*
运算符了。例如:
struct Person {
int age;
void sayHello() { std::cout << "Hello, I am " << age << " years old." << std::endl; }
};
Person person;
Person *p = &person;
Person **pp = &p;
void (Person::*func)() = &Person::sayHello;
(*pp)->*func(); // 输出:Hello, I am 0 years old.
p->age = 20;
(*pp)->*func(); // 输出:Hello, I am 20 years old.
在上面的例子中,我们定义了一个 Person
结构体,并定义了一个指向 person
的指针 p
,以及一个指向 p
的指针 pp
。我们还定义了一个 sayHello
成员函数的指针 func
,并使用 ->*
运算符来调用这个指针所指向的函数。
使用 ->*
运算符时需要注意以下几点:
->*
运算符的优先级很低,要注意加上括号。->*
运算符时会触发段错误。因此在使用之前最好先进行指针是否为空的判断。关于 ->*
运算符的内容就讲解这些,希望对你有帮助!