举例说明 typedef void(*func)(int);
时间: 2023-11-19 17:05:37 浏览: 143
这代码定义了一个名为 `func` 的类型,它是一个函数指针类型,指向一个参数为 `int` 类型,返回值为 `void` 类型的函数。
简单来说,这个类型可以用来声明函数指针变量,例如:
```c++
void foo(int x) {
// do something
}
func my_func_ptr = &foo; // 函数指针变量指向 foo 函数
my_func_ptr(42); // 调用 foo 函数,传入参数 42
```
相关问题
typedef int *P_ARR[2]; typedef int (*ARR_P)[2]; typedef void *P_FUNC(int); typedef void (*FUNC_P)(int ); typedef int (*FUNC_P_ARR[2])(int ,int);
这是C语言中的一些类型定义。
`typedef int *P_ARR[2];` 定义了一个名为`P_ARR`的类型,它是一个指向包含两个`int`类型指针的数组的指针类型。
`typedef int (*ARR_P)[2];` 定义了一个名为`ARR_P`的类型,它是一个指向包含两个`int`类型的数组的指针类型。
`typedef void *P_FUNC(int);` 定义了一个名为`P_FUNC`的类型,它是一个以一个`int`类型参数为输入,返回一个`void`类型指针的函数指针类型。
`typedef void (*FUNC_P)(int);` 定义了一个名为`FUNC_P`的类型,它是一个以一个`int`类型参数为输入,返回`void`类型的函数指针类型。
`typedef int (*FUNC_P_ARR[2])(int, int);` 定义了一个名为`FUNC_P_ARR`的类型,它是一个包含两个指向以两个`int`类型参数为输入,返回`int`类型的函数指针的数组。
``` typedef void(*func)(int a, char b,float c); void(*func)(int a, char b,float c);```这俩写法有什么不同,为什么需要typedef
这两行代码实际上是等价的,第一行使用了`typedef`关键字,第二行则直接声明了一个函数指针变量。`typedef`在C语言中用于为已存在的数据类型定义一个新的名字,目的是为了简化复杂的类型声明,增加代码的可读性。
在第一行中:
```c
typedef void (*func)(int a, char b, float c);
```
这里的`typedef`定义了一个新的类型别名`func`,它是一个指向函数的指针类型,该函数接受三个参数:一个`int`类型,一个`char`类型和一个`float`类型,没有返回值。使用`typedef`后,你可以非常方便地声明指向这类函数的指针变量,而不需要每次都写出完整的函数指针类型。
例如,使用`typedef`定义的`func`后,你可以这样声明函数指针:
```c
func ptr;
```
这比不使用`typedef`声明同样的函数指针要简洁得多:
```c
void (*ptr)(int a, char b, float c);
```
`typedef`后的命名规范建议使用小写字母,而变量名使用小写字母和下划线的组合,这样的命名方式在C语言中是比较通用的做法。
在某些情况下,`typedef`还可以帮助隐藏复杂的类型声明,提高代码的可移植性,因为某些类型可能依赖于特定平台的细节,通过`typedef`定义的别名可以抽象出具体的实现细节。
阅读全文