|
//自行包含头文件
02 void MyFun1( int x);
03 void MyFun2( int x);
04 void MyFun3( int x);
05 typedef void ( * FunType)( int ); //②. 定义一个函数指针类型FunType,与①函数类型一至 //这个是个关键,也就是定义这个标识的东西 FunType就是这个指针名
06 void CallMyFun( FunType fp , int x);
07
08 int main( int argc , char * argv [])
09 {
10 CallMyFun( MyFun1 , 10); //⑤. 通过CallMyFun函数分别调用三个不同的函数
11 CallMyFun( MyFun2 , 20);
12 CallMyFun( MyFun3 , 30);
13 }
14 void CallMyFun( FunType fp , int x) //③. 参数fp的类型是FunType。
15 {
16 fp( x); //④. 通过fp的指针执行传递进来的函数,注意fp所指的函数是有一个参数的
17 }
18 void MyFun1( int x) // ①. 这是个有一个参数的函数,以下两个函数也相同
19 {
20 printf( “函数 MyFun1 中输出: % d \n ” , x);
21 }
22 void MyFun2( int x)
23 {
24 printf( “函数 MyFun2 中输出: % d \n ” , x);
25 }
26 void MyFun3( int x)
27 {
28 printf( “函数 MyFun3 中输出: % d \n ” , x);
29 }
在嵌入式中操作函数指针十分方便,如:
1 /* 定义一个无参数、无返回类型的函数指针类型 */
2 typedef void ( * lpFunction) ( );
3 /* 定义一个函数指针,指向CPU启动后所执行第一条指令的位置 */
4 lpFunction lpReset =( lpFunction) 0xF000FFF0;
5 /* 调用函数 */
6 lpReset();
IpReset(),它实际上起到了“软重启”的作用,跳转到CPU启动后第一条要执行的指令的位置。
|
|