调用时:(*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。
1 void MyFun(int x);//此处的申明也可以写成:void MyFun(int); 2 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。 3 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 MyFun(10);//这是直接调用MyFun函数 7 FunP = MyFun;//将MyFun函数的地址赋给FunP变量 8 (*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。 9 10 system("pause"); 11 return 0; 12 } 13 void MyFun(int x)//这里定义一个MyFun函数 14 { 15 printf("%d ",x); 16 }
或者如下编译: FunP(20);//这是通过函数指针变量来调用MyFun 函数的。
1 #include "stdafx.h" 2 #include <stdlib.h> 3 #include <stdio.h> 4 5 void MyFun(int x);//此处的申明也可以写成:void MyFun(int); 6 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 MyFun(10);//这是直接调用MyFun函数 11 FunP = MyFun;//将MyFun函数的地址赋给FunP变量 12 FunP(20);//这是通过函数指针变量FunP来调用MyFun函数的。 13 14 system("pause"); 15 return 0; 16 } 17 void MyFun(int x)//这里定义一个MyFun函数 18 { 19 printf("%d ",x); 20 }
或者:
FunP=&MyFun;//将MyFun 函数的地址赋给FunP 变量
FunP(20);//这是通过函数指针变量来调用MyFun 函数的。
1 #include "stdafx.h" 2 #include <stdlib.h> 3 #include <stdio.h> 4 5 void MyFun(int x);//此处的申明也可以写成:void MyFun(int); 6 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 MyFun(10);//这是直接调用MyFun函数 11 FunP = &MyFun;//将MyFun函数的地址赋给FunP变量 12 FunP(20);//这是通过函数指针变量FunP来调用MyFun函数的。 13 14 system("pause"); 15 return 0; 16 } 17 void MyFun(int x)//这里定义一个MyFun函数 18 { 19 printf("%d ",x); 20 }
FunP = &MyFun;//将MyFun函数的地址赋给FunP变量
(*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。
1 #include "stdafx.h" 2 #include <stdlib.h> 3 #include <stdio.h> 4 5 void MyFun(int x);//此处的申明也可以写成:void MyFun(int); 6 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样。 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 MyFun(10);//这是直接调用MyFun函数 11 FunP = &MyFun;//将MyFun函数的地址赋给FunP变量 12 (*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的。 13 14 system("pause"); 15 return 0; 16 } 17 void MyFun(int x)//这里定义一个MyFun函数 18 { 19 printf("%d ",x); 20 }
结论:
1. 其实,MyFun 的函数名与FunP 函数指针都是一样的,即都是函数指针。MyFun 函数名是一个
函数指针常量,而FunP 是一个函数数指针变量,这是它们的关系。
2. 但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以
C 语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用(这样方便多了并与数学中的函数
形式一样,不是吗?)。
3. 为统一起见,FunP 函数指针变量也可以FunP(10)的形式来调用。
4. 赋值时,即可FunP=&MyFun 形式,也可FunP=MyFun。
补充说明一点:在函数的申明处:
void MyFun(int );//不能写成void (*MyFun)(int )。
void (*FunP)(int );//不能写成void FunP(int )。