C语言常见面试题:什么是函数指针,函数指针的作用是什么?

函数指针是指向函数的指针变量,其本质是指向代码块的指针。每个函数在编译时都会有一个唯一的入口地址,这个地址就是函数指针所指向的地址。在C和C++等编程语言中,函数指针通常是指向特定函数类型的指针,即函数原型和返回类型都一致的函数。

函数指针的作用主要有两个:

  1. 作为参数传递给其他函数:回调函数是函数指针的一个重要应用场景。通过将一个函数指针作为参数传递给其他函数,后者可以将“回调”用户函数。这种设计模式在很多场景下都非常有用,例如实现一个与类型无关的查找函数(单链表),要求可以查找任何类型的值。这时可以将参数类型声明为void *,表示“一个指向未知类型的指针”,然后通过函数指针来调用相应的查找函数。
  2. 转换表:函数指针可以用于实现转换表。转换表是一种将输入数据按照一定规则转换成另一种数据类型的方法,而这个转换规则可以通过函数指针来实现。具体来说,可以将每个转换规则对应的函数指针存储在一张表中,根据输入数据的特点来选择相应的函数指针进行数据转换。这种方法的优点是可扩展性好,如果需要添加新的转换规则,只需要在表中添加相应的函数指针即可。

此外,函数指针还有其他一些应用场景,例如实现事件驱动的编程模型、实现动态绑定等。通过灵活运用函数指针,可以实现更加灵活和高效的代码生成。

函数指针是C、C++、D语言、其他类C语言和Fortran 2003中的概念。在C语言中,函数同样有个地址,所以可以定义一个指针来指向一个函数,称为函数指针。函数指针为C语言提供了灵活性和动态性,可以用于实现回调函数、动态函数调用、函数表等多种应用场景。

在C语言中,函数指针的定义如下:

 
  

c复制代码

return_type (*function_pointer_name)(parameter_list);

其中,return_type 是函数的返回类型,function_pointer_name 是函数指针的名称,parameter_list 是函数的参数列表。函数指针名后的括号中的内容表示函数的参数列表,括号内的内容表示函数的返回类型。

下面是一个具体的示例:

 
  

c复制代码

#include
int add(int a, int b) {
return a + b;
}
int main() {
int (*func_ptr)(int, int); // 定义一个函数指针,指向返回类型为int且有两个int参数的函数
func_ptr = &add; // 将函数指针指向add函数
printf("%d\n", func_ptr(2, 3)); // 调用函数指针,输出结果5
return 0;
}

在上面的示例中,我们定义了一个函数指针 func_ptr,它指向返回类型为 int 且有两个 int 参数的函数。然后我们将 func_ptr 指向了 add 函数,最后通过函数指针调用了 add 函数,并输出了结果。

你可能感兴趣的:(C语言,c语言,面试,开发语言)