网站建设适合什么单位实时热点新闻事件
文章目录
- @[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)那么该变量就变为了静态变量,静态变量是存放在数据段的,他的生命周期存在于整个程序运行期间。只要程序没有结束,该变量就一直存在。
还有一种解决方法是使用全局变量。因为全局变量也是存放于数据段的。
