面试题答案
一键面试#include <stdio.h>
// 定义一个函数类型
typedef void (*FuncPtr)(void);
// 使用typedef定义包含函数指针的结构体类型
typedef struct {
FuncPtr func;
} MyStruct;
// 一个示例函数,将作为结构体中函数指针指向的函数
void exampleFunction() {
printf("This is an example function.\n");
}
// 调用结构体中函数指针的函数
void callFunctionInStruct(MyStruct s) {
if (s.func) {
s.func();
}
}
在上述代码中:
- 首先使用
typedef
定义了一个函数指针类型FuncPtr
,使得代码中对函数指针的声明更加简洁。 - 然后使用
typedef
定义了MyStruct
结构体类型,将函数指针成员func
包含在结构体中。这样在后续代码中定义该结构体变量时,只需要使用MyStruct
,而不需要冗长的struct {... }
形式。 callFunctionInStruct
函数接受MyStruct
类型的参数,并调用结构体中的函数指针。
typedef在这种场景下提高代码可读性和可维护性的方式:
- 可读性:使用
typedef
定义的类型名MyStruct
和FuncPtr
,能够清晰地表达代码意图。例如在callFunctionInStruct
函数定义中,参数类型为MyStruct
,很容易理解这个函数是处理特定结构体类型,其中包含一个函数指针用于调用。相比直接使用struct {... }
形式定义结构体,typedef
后的类型名更简洁明了。 - 可维护性:如果结构体的定义或者函数指针的类型需要修改,只需要在
typedef
定义处进行修改,而不需要在所有使用该结构体或函数指针类型的地方逐个修改。例如,如果函数指针的参数或返回值类型发生变化,只需修改typedef void (*FuncPtr)(void);
这一行代码,其他依赖FuncPtr
和MyStruct
的代码无需改动,降低了维护成本。