函数指针变量
函数指针变量的作用
函数指针变量是指向函数的指针,它可以用来存储函数的地址,并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面:
-
回调函数:函数指针变量可以作为参数传递给其他函数,从而实现回调函数的功能。当某个条件满足时,可以通过函数指针调用相应的回调函数,实现特定的功能。
-
动态选择函数:通过函数指针变量,可以在运行时根据不同的条件选择不同的函数执行。这样可以提高程序的灵活性和可扩展性。
-
函数的别名:函数指针变量可以作为函数的别名使用,可以简化代码,提高代码的可读性。
-
实现函数表:通过将多个函数的指针存储在一个数组或者结构体中,可以实现函数表。通过索引或者其他方式,可以方便地调用相应的函数。
——————————————————————————————————————————
函数指针变量语法格式
这里和指针数组
———————————————————————————————————————————
函数指针变量的定义和举例
函数指针是指向函数的指针变量。它可以用来存储函数的地址,从而可以通过指针调用函数。函数指针的定义方式如下:
返回类型 (*指针变量名)(参数列表);
其中,返回值类型是函数的返回值类型,指针变量名是函数指针的名称,参数列表是函数的参数类型和个数。
下面是一个函数指针的示例:
例如,我们有一个函数 add,它接受两个整数参数并返回它们的和。我们可以声明一个函数指针 p 来指向该函数:
int add(int a, int b) {
return a + b;
}
int (*p)(int, int); // 声明一个函数指针变量p
p = add; // 将函数add的地址赋值给p
int result = p(3, 4); // 通过函数指针调用add函数
在上面的例子中,我们声明了一个返回类型为 int,参数列表为 (int, int) 的函数指针 p。然后,我们将函数 add 的地址赋值给了 p,最后通过 p 调用了 add 函数并将结果赋给了 result。
函数指针在实际应用中非常有用,可以用于实现回调函数、动态加载库中的函数等场景
———————————————————————————————————————————
函数指针变量语法格式的讲解
数组指针->指针->指向数组的->存放的是数组的地址
&数组名是数组的地址
数组名是数组首元素的地址,两个地址的值是一样的!
对于首元素的理解不深入的 ,可以看一下这一篇文章
指针数组和数组指针(详细解释)-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/136581096
pf专门 用来存放地址
按照函数指针的格式来进行书写,就变成函数指针
这里是语法是相互对应的
这里的括号是不能去掉的,虽然pf是变量名字,但是那个括号是不能去掉的
去掉*pf外面的括号的话
pf就变成了名字不再是代表指针函数数组
而是变成,表示一个函数的声明,该函数返回一个返回值类型的指针变量。
所以,这里的语法格式是不能改变的
所以,这样也是可以的
函数指针变量函数名的调用和函数指针调用的对比
函数名调用
拿一个数值进行接收,直接传参
函数指针的调用
此时pf的*和()可以写也可以不写
并且函数名本身就等于调用的函数,类似于重命名
最后打印接收的返回值
——————————————————————————————————————————————————————————————————————————————————————
补充知识
强制类型转化
作用
C语言中的强制类型转换是一种将一个数据类型转换为另一个数据类型的操作。它可以通过显式地指定要转换的数据类型来实现。强制类型转换可以用于以下几种情况:
-
改变变量的数据类型:当需要将一个变量的数据类型从一种类型转换为另一种类型时,可以使用强制类型转换。例如,将一个整数转换为浮点数,或者将一个字符转换为整数。
-
提升数据类型:当进行表达式计算时,如果参与计算的操作数具有不同的数据类型,C语言会自动进行隐式类型转换,将较低精度的操作数提升为较高精度的操作数。但是有时候我们需要手动进行提升,以确保计算结果的准确性。
-
缩小数据类型:有时候我们需要将一个较高精度的数据类型转换为较低精度的数据类型,这时候就需要使用强制类型转换。需要注意的是,缩小数据类型可能会导致数据丢失或溢出,因此需要谨慎使用。
强制类型转换的语法如下:
(目标类型) 表达式
其中,目标类型是要转换成的数据类型,表达式是要进行转换的值或变量。
需要注意的是,强制类型转换可能会导致数据的精度丢失或溢出,因此在使用时需要谨慎考虑。此外,过度使用强制类型转换可能会导致代码可读性降低,建议在必要的情况下使用。
举例
C语言中的强制类型转换是一种将一个数据类型转换为另一个数据类型的操作。它可以通过使用强制类型转换运算符来实现,即将要转换的数据类型放在要转换的值或表达式前面,用括号括起来。
例如,将一个整数类型转换为浮点类型可以使用强制类型转换。下面是一个示例:
int num = 10; float result = (float)num;
在上面的示例中,我们将整数类型的变量num强制转换为浮点类型,并将结果赋给浮点类型的变量result。
需要注意的是,强制类型转换可能会导致数据丢失或精度损失。因此,在进行强制类型转换时,需要谨慎考虑数据类型之间的兼容性和可能的副作用。
具体举例
函数的返回类型
强制类型转化的语法
——————————————————————————————————————————————————————————————————————————————————————
typedef
typedef类型重命名
这里一笔带过 ,在指针2里面讲的很清楚,结构体和结构体的重命名
结构体详解-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/136477956指针篇章-(2)-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/136408404