函数名取地址和不取的区别
时间: 2024-01-22 18:20:42 浏览: 39
在 C 或 C++ 语言中,对于一个函数名的使用,有取地址和不取地址两种情况。
1. 取地址
当我们使用函数名来获取该函数的地址时,可以将其作为函数指针使用,即可以将它赋值给一个指向该函数类型的指针变量。例如:
```c++
#include <iostream>
void foo() {
std::cout << "Hello, world!" << std::endl;
}
int main() {
void (*p)() = &foo; // 取函数 foo 的地址,赋值给指向函数类型的指针变量 p
p(); // 通过指针调用函数 foo
return 0;
}
```
在上面的例子中,我们使用 `&foo` 来获取函数 `foo` 的地址,并将其赋值给指向函数类型的指针变量 `p`。然后,我们通过指针 `p` 调用函数 `foo`。
2. 不取地址
当我们直接使用函数名时,实际上是将其作为一个函数调用。例如:
```c++
#include <iostream>
void foo() {
std::cout << "Hello, world!" << std::endl;
}
int main() {
foo(); // 直接调用函数 foo
return 0;
}
```
在上面的例子中,我们直接使用函数名 `foo` 来调用函数 `foo`。
因此,取地址和不取地址的区别在于,取地址可以将函数名作为函数指针使用,而不取地址则直接将函数名作为函数调用。
相关问题
类成员函数名取地址和不取的区别
成员函数名取地址和不取的区别在于,取地址会得到该成员函数在内存中的地址,而不取地址则直接调用该成员函数。取地址通常用于函数指针、回调函数等场景中,而不取地址则通常用于直接调用成员函数的场景中。
例如,以下代码演示了成员函数名取地址的用法:
```
class MyClass {
public:
void myFunc() {}
};
int main() {
MyClass obj;
void (MyClass::*ptr)() = &MyClass::myFunc; // 取地址
(obj.*ptr)(); // 调用成员函数
return 0;
}
```
在上述代码中,将 `MyClass::myFunc` 的地址存储在 `ptr` 中,并通过 `obj.*ptr` 调用了该成员函数。
而如果不取地址,则可以直接调用成员函数,例如:
```
class MyClass {
public:
void myFunc() {}
};
int main() {
MyClass obj;
obj.myFunc(); // 直接调用成员函数
return 0;
}
```
因此,成员函数名取地址和不取的区别在于使用场景不同。
c语言结构体成员函数取地址
在C语言中,结构体不支持直接定义成员函数。然而,我们可以通过指针和函数指针来模拟实现结构体的成员函数。为了取得结构体成员函数的地址,我们可以使用指针和箭头运算符(->)。假设有一个指向结构体变量的指针p,我们可以通过p->成员函数名来取得成员函数的地址。这样可以使我们能够在C语言中模拟出类似于面向对象语言中的成员函数的功能。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)