如何看待c语言函数指针typedef void (*IapFun)(void);

发布一下 0 0


typedef void (*IapFun)(void);jump2app = (iapfun) * (vu32 *)(appxaddr + 4); //用户代码区第二个字为程序开始地址(复位地址)MSR_MSP(*(vu32 *)appxaddr);                   //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)jump2app();                                   //跳转到APP.

对这段代码有种熟悉的陌生感,遂特此记录,以供日后察看.

typedef的意义

typedef int a[10];          // a 类型是 int[10];(存放int型数据的数组)a arr;                      // 定义一个数组:int arr[3];typedef void (*p)(void);    //p 类型是void ( * )voidp A;                        //是指void(*A)(void);


语法上typedef属于存储类声明说明符。
a[10]不是int的别名,(*p)(void)不是void的别名。
上面的语句把a声明为具有10个int元素的数组的类型别名,p是一种函数指针的类型别名。

定义一个函数指针类型。
比如原函数是

 void   func(void);


那么定义的函数指针类型就是

typedef void (*Fun)(void);


然后用此类型生成一个指向函数的指针:

Fun func1;


当func1获取函数地址之后,那么你就可以向调用原函数那样来使用这个函数指针:

func1(void);

函数指针对象赋值用法

两种用法

typedef void (*IapFun)(void);  //定义函数指针void func(void);               //定义函数IapFun fun  = func;            //为函数指针对象赋值fun();                         //这里的fun()其实就相当于跳转到了func()里


typedef void (* IapFun)(void);          //定义函数指针IapFun jump2app;                         //定义函数指针对象jump2app=(IapFun) * (vu32*)(appxaddr+4); //为函数指针对象赋值 appxaddr为函数指针地址,例如0x08000000jump2app();                              //调用函数

来自技术让梦想更伟大

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/82832.html

  • 评论列表

留言评论