函数指针说白了,,,,函数的地址
现在看一个简单的--先定义一个函数指针
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 } 一样的的道理