C语言中的函数类型和函数指针
2013-05-21 09:44
169 查看
#include <stdio.h> #include <string.h> void func1() { printf("Func1 is runing...\n"); } void func2() { printf("Func2 is runing...\n"); } void func3() { printf("Func3 is runing...\n"); } void func4() { printf("Func4 is runing...\n"); } void Temp_function() { printf("\nPlease input 1-4 to select test!!!\n"); } struct //结构体数组 { void (*fun)(void); // 函数指针 char *tip; // 字符串 }CmdTip[] = { { Temp_function, "Please input 1-4 to select test" } , { func1, "Fun1" } , { func2, "Fun2" } , { func3, "Fun3" } , { func4, "Fun4" } , { 0, 0} }; int main() { int i; while(1) { unsigned char idx; printf("\nPlease select function : \n"); for(i=0; CmdTip[i].fun!=0; i++) printf("%d : %s\n", i, CmdTip[i].tip); scanf("%hhu", &idx); // printf("idx=%d; i=%d", idx, i); if(idx<i) (*CmdTip[idx].fun)(); } return 0; }
回调函数的使用范例:
#include <stdio.h> typedef int(*FUNCTION)(int); int g(int n, FUNCTION f) { int i = 0; int ret = 0; for(i=1; i<=n; i++) { ret += i*f(i); } return ret; } int f1(int x) { return x + 1; } int f2(int x) { return 2*x - 1; } int f3(int x) { return -x; } int main() { printf("x * f1(x): %d\n", g(3, f1)); printf("x * f2(x): %d\n", g(3, f2)); printf("x * f3(x): %d\n", g(3, f3)); }
实例分析(u-boot-2009.11/lib_arm/bootm.c):
//实例分析(u-boot-2009.11/lib_arm/bootm.c) int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) { bd_t *bd = gd->bd; char *s; int machid = bd->bi_arch_number; // 声明一个函数指针 是第二图中 直接直接定义的一种 void (*theKernel)(int zero, int arch, uint params); if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) return 1; // 为这个函数指针赋值 将images->ep强制转化为函数类型 theKernel = (void (*)(int, int, uint))images->ep; cleanup_before_linux (); // 调用这个函数 另一种方法:(*theKernel) (0, machid, bd->bi_boot_params); theKernel (0, machid, bd->bi_boot_params); /* does not return */ return 1; }
相关文章推荐
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C语言回顾(六、基类型,数组指针,字符串指针,函数指针,文字常量区)——iOS开发基础
- C语言实现的线性表 函数形参:指针类型与变量类型的区别 (SqList *L)(SqList L)
- C语言大世界—————08指针类型(函数指针)上
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- C语言的函数指针类型和回调函数-源码
- 函数返回类型为指针类型时的一些问题
- ios学习路线—C语言(函数,数组,字符串,指针)
- 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)
- C语言的指针类型
- C++ 二级指针、函数指针与数组复合类型的问题分析
- [编程] C语言结构体指针作为函数参数
- C语言指针与函数的关系
- 12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
- 函数指针、类型别名与智能指针
- 【C语言复习(十九)】函数与指针
- 详解C语言中的函数、数组与指针
- C语言提高-第24/25讲: 数组名【指针】作为函数参数(成绩处理函数版)
- C语言指针导学(4)——分清函数指针和指针函数