函数指针说白了,,,,函数的地址
现在看一个简单的--先定义一个函数指针
void (*f1)();就是这样定义--指向的是一个void类型的
假设定义了另一个 void f2();
可以 f1 = &f2 或者 f1=f2;
直接代码了
#include<stdio.h> #include<stdlib.h> void (*f1)(); void f2(); void main() { f1=f2; (*f1)(); } void f2() { printf("11111\n"); }
f1=f2;这个好理解--把f2的地址给了f1呗;
(*f1)();这一句,要想一下*f1中的*在想一想在普通指针中什么意思 取取取取取取 要想--哎呀*f1不就相当于f2吗 所以(*f1)();不就相当于f2();
看下一个
#include<stdio.h> #include<stdlib.h> void (*f1)(int x); void f2(int x); void main() { f1=f2; (*f1)(2); } void f2(int x) { printf("x=%d\n",x); }
也没什么难的
void (*f1)(int x); void f2(int x);
不过好像这两个的类型要一样,,,现在都是无返回值的带int型的参数的函数
再看下一个
#include<stdio.h> #include<stdlib.h> int (*f1)(int x); int f2(int x); void main() { f1=f2; (*f1)(2); } int f2(int x) { printf("x=%d\n",x); return 0;//必须返回点东西,不然编译会报错 }
运行结果和上面一样--理所当然
#include<stdio.h> #include<stdlib.h> void f2(); void f3( void(*f4)() ); void main() { f3(f2); } void f2() { printf("1111\n"); } void f3( void(*f4)() ) { (*f4)(); }
其实感觉也没什么--和 void f3( *P ){a =*P } 一样的的道理