C语言 函数指针的应用

简单的介绍下C语言函数指针的用法。

函数指针的声明:

char (* FunPtr)(char); 或者char (* FunPtr)(char ch);  (声明类型个形参类型根据实际情况更改)

例:

 1 #include"stdio.h"
 2
 3 char myFun(char ch)
 4 {
 5     printf("myFun is called, your char is %c.\n",ch);
 6     return ‘w‘;
 7 }
 8
 9 void main()
10 {
11     char temp;
12
13     char (* funPtr)(char);    //定义一个函数指针
14     funPtr=myFun;            //将myFun的地址给funPtr
15     temp=funPtr(‘s‘);        //此时可以认为对funPtr的调用就等同于对myFun的调用
16
17     printf("return value: %c\n",temp);
18     printf("size of myFun: %d\n",sizeof(funPtr));
19 }结果:

myFun is called, your char is s.
return value: w
size of myFun: 4

也可以将函数的定义放到结构体中,通过结构体成员变量来调用。

例:

 1 #include"stdio.h"
 2
 3 typedef struct{
 4     char (* funPtr)(char);    //定义一个函数指针
 5 }myFunStruct_t;
 6
 7 char myFun(char ch)
 8 {
 9     printf("myFun is called, your char is %c.\n",ch);
10     return ‘w‘;
11 }
12
13 void main()
14 {
15     char temp;
16
17     myFunStruct_t myFunStruct;
18     myFunStruct.funPtr=myFun;        //将myFun的地址给funPtr
19     temp=myFunStruct.funPtr(‘s‘);    //此时可以认为对funPtr的调用就等同于对myFun的调用
20
21     printf("return value: %c\n",temp);
22     printf("size of myFunStruct_t: %d\n",sizeof(myFunStruct_t));
23 }结果:

myFun is called, your char is s.
return value: w
size of myFunStruct_t: 4

或者来点更高级的玩法,

例:

 1 #include"stdio.h"
 2
 3 typedef void (* funInPtr_t)(void);        //函数原型定义
 4 typedef void (* funOutPtr_t)(void);
 5
 6 typedef struct{
 7     funInPtr_t funInPtr;
 8 }myInStruct_t;
 9
10 typedef struct{
11     funOutPtr_t funOutPtr;
12     myInStruct_t myInStruct;
13 }myOutStruct_t;
14
15 void myInFun(void)
16 {
17     printf("myInFun\n");
18 }
19
20 void myOutFun(void)
21 {
22     printf("myOutFun\n");
23 }
24
25 void main()
26 {
27     myOutStruct_t myOutStruct;
28     myOutStruct.funOutPtr=myOutFun;
29     myOutStruct.myInStruct.funInPtr=myInFun;
30
31     myOutStruct.funOutPtr();                    //外层函数
32     myOutStruct.myInStruct.funInPtr();            //内层函数
33
34     printf("size of myInStruct_t: %d\n",sizeof(myInStruct_t));
35     printf("size of myOutStruct_t: %d\n",sizeof(myOutStruct_t));
36 }结果:

myOutFun
myInFun
size of myInStruct_t: 4
size of myOutStruct_t: 8

是不是像某些语言里的“一点到底”?

C语言的指针就是这么任性!

时间: 2024-08-04 22:22:44

C语言 函数指针的应用的相关文章

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

c语言函数指针实例

如果使用typedef 是这样的 //可以把一个小写字母变成大写 //char (*pFun)(char); typedef char (*PTRFUN)(char); PTRFUN pFun; char glFun(char a){ return a & 223;} void print(int a,PTRFUN call){ cout<<call(a)<<endl;}void main() { pFun = glFun; print('a',pFun);} 如果不使用t

c语言函数指针

1 void PrePrintOrTree(struct TreeNode* root, void (*WorkPrint)(double)){ 2     struct TreeNode* index = root; 3     if (root == NULL){ 4         return; 5     } 6     PrePrintOrTree(root->lchild,WorkPrint); 7     (*WorkPrint)(root->value); 8     Pre

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

深入理解C语言函数指针(转)

本文转自:http://www.cnblogs.com/windlaughing/archive/2013/04/10/3012012.html 示例1: void myFun(int x); //声明也可写成:void myFun( int ); int main() { myFun(100);//一般的函数调用 return 0; } void myFun(int x) { printf("myFun: %d\n",x); } 我们一开始只是从功能上或者说从数学意义上理解myFun

C语言 函数指针定义三种方式

//函数指针 #include<stdio.h> #include<stdlib.h> #include<string.h> //函数指针类型跟数组类型非常相似 //函数名就是函数的地址,函数的指针,对函数名进行&取地址操作,还是函数名本身,这是C语言编译器的特殊处理 void test(int a){ printf("a=%d\n",a); } void ProtectA(){ //定义函数类型 typedef void(FunType)(

深入浅出剖析C语言函数指针与回调函数(一)【转】

本文转载自:http://blog.csdn.net/morixinguan/article/details/65494239 关于静态库和动态库的使用和制作方法. http://blog.csdn.NET/morixinguan/article/details/52451612 今天我们要搞明白的一个概念叫回调函数. 什么是回调函数? 百度的权威解释如下: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说

C语言 函数指针二(正向调用)

//函数指针做函数参数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<Windows.h> /* 函数指针做函数参数 实现了2大功能:1.定义了一个指针类型,分配了4个字节大小的内存空间 2.规定了调用函数的参数列表,和返回值 正向调用:通过window自带系统函数库调用dll文件,获取dll文件中的函数地址,执行函数 反向调用:通过函数指针,在另一个函数里调用别的函数 */

C语言----函数指针

回调函数 1. 函数指针 做参数 2. 回调过程 例代码 // // main.m // C_Project_12 // // Created by on 15/3/26. // Copyright (c) 2015年 . All rights reserved. // #import <Foundation/Foundation.h> //课堂练习题:写一函数查找成绩90分以上的学员,使?用回调函数在姓名后加"?高富 帅". //1.定义结构体类型 typedef str