C++中的函数指针的问题
能详细讲讲吗?我的书上没有详细讲。谢谢各位!
能详细讲讲吗?我的书上没有详细讲。谢谢各位!
答案:函数指针就是代表一个函数在内存中的首地址。
一个常见的情形就是回调函数。
你现在学基本的C语言可能没怎么遇到,如果你真的对编程感兴趣,以后会经常用到函数指针的。
我接触的图形程序基本都需要函数指针,例如Windows程序编程(光是用printf之类输出函数的多无趣,在实际中我们哪还用这一类的Windows程序啊呵呵,至少也要弄几个窗口吧,这就需要用到函数指针),OpenGL的GLUT库,linux上面很流行的GTK+图形库,做这些编程的时候不可能不用到函数指针。
对了我以前还试过做PSP游戏机上的游戏,那个也是靠函数指针来做回调。
函数指针使得系统可以得到你编写的函数的位置,这样可以使得操作系统在适当的时候调用你写的函数。
初学C语言的人常常在C语言标准库的atexit函数里用到函数指针,这个atexit接受一个函数指针,使得main函数执行完毕之后就运行你的函数。
我写了一个小程序演示函数指针,看完之后你应该就可以搞懂函数指针的作用了。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef void (*func_type_1)();
typedef void (*func_type_2)(int);
void func_A(){
printf("正在运行函数A\
");
}
void func_B(int n){
printf("正在以参数%d运行函数B\
",n);
}
void func_C(int n){
printf("正在以参数%d运行函数C\
",n);
}
void end_of_main(){
printf("***********************\
main函数结束了");
}
int main(int argc, char *argv[])
{
func_type_1 foo;
func_type_2 bar;
char input='\\0';
int n;
atexit(end_of_main);
printf("接下来用函数的指针来运行函数A\
");
foo=func_A;
foo();
printf("接下来你想运行函数B还是函数C?\
");
printf("1.函数B\
2.函数C\
");
switch(input=getch()){
case '1':
bar=func_B;
input='B';
break;
case '2':
bar=func_C;
input='C';
break;
default:
printf("输入错误,现在执行函数B\
");
bar=func_B;
input='B';
break;
}
printf("输入一个整形参数来执行函数%c\
",input);
scanf("%d",&n);
bar(n);
return 0;
}
自己编译一次,再仔细想想程序的流程。
还有问题的话可以再联系我。
发邮件到 bombless[at]126.com
把[at]换成@吧。
或者通过百度把Q号给我之类的也行。
上一个:现在关于C++培训机构比较好?
下一个:C与C++有什么区别和联系