C语言——函数指针——函数指针变量(详解)

本文详细介绍了函数指针变量的概念、作用,如回调函数、动态选择和函数别名,以及如何定义和使用。同时涵盖了函数指针的语法格式、强制类型转换的重要性及其使用示例。
摘要由CSDN通过智能技术生成

函数指针变量

函数指针变量的作用

函数指针变量是指向函数的指针,它可以用来存储函数的地址,并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面:

  1. 回调函数:函数指针变量可以作为参数传递给其他函数,从而实现回调函数的功能。当某个条件满足时,可以通过函数指针调用相应的回调函数,实现特定的功能。

  2. 动态选择函数:通过函数指针变量,可以在运行时根据不同的条件选择不同的函数执行。这样可以提高程序的灵活性和可扩展性。

  3. 函数的别名:函数指针变量可以作为函数的别名使用,可以简化代码,提高代码的可读性。

  4. 实现函数表:通过将多个函数的指针存储在一个数组或者结构体中,可以实现函数表。通过索引或者其他方式,可以方便地调用相应的函数。

 ——————————————————————————————————————————

 函数指针变量语法格式 

这里和指针数组 

———————————————————————————————————————————

函数指针变量的定义和举例

函数指针是指向函数的指针变量。它可以用来存储函数的地址,从而可以通过指针调用函数。函数指针的定义方式如下:

返回类型 (*指针变量名)(参数列表);

其中,返回值类型是函数的返回值类型,指针变量名是函数指针的名称,参数列表是函数的参数类型和个数。

下面是一个函数指针的示例:

例如,我们有一个函数 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语言中的强制类型转换是一种将一个数据类型转换为另一个数据类型的操作。它可以通过显式地指定要转换的数据类型来实现。强制类型转换可以用于以下几种情况:

  1. 改变变量的数据类型:当需要将一个变量的数据类型从一种类型转换为另一种类型时,可以使用强制类型转换。例如,将一个整数转换为浮点数,或者将一个字符转换为整数。

  2. 提升数据类型:当进行表达式计算时,如果参与计算的操作数具有不同的数据类型,C语言会自动进行隐式类型转换,将较低精度的操作数提升为较高精度的操作数。但是有时候我们需要手动进行提升,以确保计算结果的准确性。

  3. 缩小数据类型:有时候我们需要将一个较高精度的数据类型转换为较低精度的数据类型,这时候就需要使用强制类型转换。需要注意的是,缩小数据类型可能会导致数据丢失或溢出,因此需要谨慎使用。

强制类型转换的语法如下:

(目标类型) 表达式

其中,目标类型是要转换成的数据类型,表达式是要进行转换的值或变量。

需要注意的是,强制类型转换可能会导致数据的精度丢失或溢出,因此在使用时需要谨慎考虑。此外,过度使用强制类型转换可能会导致代码可读性降低,建议在必要的情况下使用。

 举例

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

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的指针函数是指返回值为指针类型的函数,它们在函数的定义和调用上与普通函数有所不同。 指针函数的定义需要在函数名前加上返回类型为指针的声明,并在函数体内返回一个指针类型的值。例如,我们可以定义一个返回整型指针的函数如下: ```c int* allocateIntArray(int size) { int* array = (int*)malloc(size * sizeof(int)); return array; } ``` 在调用指针函数时,需要用一个与返回类型相匹配的指针变量接收返回值。例如,调用上述函数并将返回值存储在指针变量中: ```c int* myArray = allocateIntArray(5); ``` 上述代码中,myArray是一个整型指针变量,它用于存储allocateIntArray函数的返回值。这个返回值是一个指向分配的整型数组的指针。 指针函数的调用过程中,我们还需要注意以下几点: 1. 为了避免内存泄漏,我们通常需要在不使用指针的时候手动释放内存,可以使用free函数来释放通过malloc分配的内存。 2. 在函数内部分配的内存空间返回给调用者后,我们应该确保在使用这块内存之前不会被其他操作修改或释放掉,否则可能导致程序运行时错误。 3. 指针函数也可以作为参数传递给其他函数,使得我们可以更方便地使用和操作指针类型的数据。 总结来说,指针函数是具有返回值为指针类型的函数,其定义和调用方式与普通函数有所区别。使用指针函数可以更灵活地操作和传递指针类型的数据,但在使用时需要注意内存的释放和确保指针的有效性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值