文章目录
- @[TOC](文章目录)
- 前言
- 概述
- 函数指针
- 定义:
- 使用:
- 回调函数
- 指针函数
文章目录
- @[TOC](文章目录)
- 前言
- 概述
- 函数指针
- 定义:
- 使用:
- 回调函数
- 指针函数
前言
今天学一下函数指针
提示:以下是本篇文章正文内容,下面案例可供参考
概述
函数指针:是一个指向函数的指针,在内存空间中存放的是函数的地址。
parr是一个指向数组的指针,它存放的是数组的地址
数组指针–存放数组地址的指针
&数组名–得到数组地址
==函数指针–存放函数地址的指针
&函数名–得到函数地址
函数指针
定义:
函数指针的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。
声明形式:
ret (*p)(args,....)
函数指针:函数的返回值类型(*指针名)(函数的参数列表类型)
使用:
- int ret = (*parr)(5,5);
- 函数名=&函数名
- “ int (*parr)(int, int) = &add; ” = “int (*parr)(int, int) = add;”
- “ int ret = (*parr)(5,5);” = “int ret = parr(5,5); ” = "int ret = add(5,5)”
- 对于int ret = (*parr)(5,5)来说,*是没有意义的。有没有结果都一样
回调函数
回调函数就是一个通过指针函数调用的函数,将其函数指针作为参数传给另一个函数。回调函数是在特定的事件发生时由另外一方调用的。
指针函数
指针函数的本质是一个函数,他的返回值是一个指针。
声明形式:
ret *fun(args,....)
在使用指针函数的时候,需要避免返回局部变量指针的情况
一般的变量是存储在栈区的,当函数结束,栈区的变量就会被释放,如果我们在函数内部定义一个变量,在使用一个指针去指向这个变量,当函数调用结束时,这个变量可能就会被释放,九三返回了该地址的指针,也不一定能得到正确的值。
如果我们使用static修饰变量,(上面的static sum)那么该变量就变为了静态变量,静态变量是存放在数据段的,他的生命周期存在于整个程序运行期间。只要程序没有结束,该变量就一直存在。
还有一种解决方法是使用全局变量。因为全局变量也是存放于数据段的。