问一:函数有类型吗?
答:有,举两个例子即可明白:
例1:char func()的类型为char (*)()
例2:int * func1(char a)的类型为int *(*)(char)
问二:函数名是函数指针吗?
答:个人认为函数名同数组名一样都是个常量,表示函数体的首地址,并不是完全意义上的函数指针。
问三:函数的强制类型转换
答:可以看如下代码:
void func(){.....}
int (*funcptr)();
将func的地址赋给funcptr函数指针,需要做强制类型转换,如下:
funcptr = (int (*)())func;
验证实例:
1 #include <stdio.h>
2
3 typedef int (*funcptr)();
4
5 int func_ptr1(){
6 printf("func_ptr1 is called!\n");
7 return 1;
8 }
9
10 void func_ptr2(int a){
11 printf("func_ptr2 is called!\n");
12 }
13 int main(){
14 int a;
15 char b='a';
16 a=(int)b;
17 b=(char)a;
18 funcptr func1, func2;
19 int (*fun1)(), (*fun2)();
20 func1 = fun1 = func_ptr1;
21 fun2 = (int (*)(int))func_ptr2;
22 func2 = fun2;
23 printf("================\n");
24 (*fun1)();
25 (*fun2)();
26 printf("================\n");
27 (*func1)();
28 (*func2)();
29
30 }
结束!