指针访问成员函数所得是地址吗
时间: 2023-10-22 20:05:26 浏览: 37
指针访问成员函数得到的是函数的地址。在C++中,类的成员函数被编译后实际上是普通的函数,它们在内存中也有自己的地址。通过指针访问成员函数时,可以使用成员函数的地址来调用该函数。例如,假设有一个类A和一个成员函数func(),可以使用以下方式创建指向成员函数的指针pFunc:
```
void (A::*pFunc)() = &A::func;
```
这里pFunc是一个指向A类成员函数的指针,它指向func()函数的地址。
相关问题
数组里取函数地址是函数指针吗
是的,数组里取函数地址是函数指针。在C语言中,函数名代表了函数的入口地址,因此可以将函数名作为指针存储在数组中,这个指针就是函数指针。例如,假设有一个函数`int add(int a, int b)`,可以定义一个函数指针变量`int (*p)(int, int)`,然后将函数名赋值给它,即`p = add`。也可以定义一个函数指针数组,将多个函数的入口地址存储在数组中,例如`int (*func_ptr[10])(int)`,表示一个大小为10的函数指针数组,每个元素都是一个函数指针,指向一个返回值为int、参数为int的函数。可以通过数组下标访问每个函数指针,例如`func_ptr[0] = add`。
如何使用指针访问成员函数和变量,请给我例子
当我们有一个指向对象的指针时,可以使用箭头运算符(->)来访问对象的成员函数和变量。
以下是一个示例:
```cpp
#include <iostream>
class MyClass {
public:
int myVariable;
void myFunction() {
std::cout << "Hello from myFunction!" << std::endl;
}
};
int main() {
MyClass obj;
obj.myVariable = 42;
obj.myFunction();
MyClass* ptr = &obj;
ptr->myVariable = 10;
ptr->myFunction();
return 0;
}
```
在这个例子中,我们定义了一个名为MyClass的类,它有一个整数类型的成员变量myVariable和一个无返回值的成员函数myFunction。
在主函数中,我们首先创建了一个MyClass对象obj,通过对象名称使用点运算符(.)来访问成员变量和成员函数。
然后,我们创建了一个指向MyClass对象的指针ptr,并使用箭头运算符(->)来访问对象的成员变量和成员函数。
通过ptr->myVariable,我们可以访问和修改对象的成员变量。通过ptr->myFunction(),我们可以调用对象的成员函数。
输出结果将是:
```
Hello from myFunction!
Hello from myFunction!
```
请注意,在使用指针访问成员函数和变量时,确保指针不为空(即指向有效的对象),否则可能会导致空指针异常。