C语言结构体中的函数指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语⾔结构体中的函数指针
这篇⽂章简单的叙述⼀下函数指针在结构体中的应⽤,为后⾯的⼀系列⽂章打下基础
本⽂地址:,转载请注明源地址。
引⾔
指针是C语⾔的重要组成部分, 于是深⼊理解指针并且⾼效地使⽤指针可以使程序员写出更加⽼练的程序。
我们要记住指针是⼀个指向内存地址的变量。
指针可以引⽤如int、char……常见的数据类型,例如:
int * intptr; // 声明⼀个指向整型值的指针
int intval = 5 ; // 定义⼀个整型变量
intptr = & intval ; // intptr现在包含intval的地址
指针不仅仅指向常规的类型还可以指向函数
函数指针
函数指针的内容不难理解,不再赘述,参见《》
语法
要声明⼀个函数指针,使⽤下⾯的语法:
Return Type ( * function pointer's variable name ) ( parameters )
例如声明⼀个名为func的函数指针,接收两个整型参数并且返回⼀个整型值
int (*func)(int a , int b ) ;
可以⽅便的使⽤类型定义运⽤于函数指针:
typedef int (*func)(int a , int b ) ;
结构体中的函数指针
我们⾸先定义⼀个名为Operation的函数指针:
typedef int (*Operation)(int a , int b );
再定义⼀个简单的名为STR的结构体
typedef struct _str {
int result ; // ⽤来存储结果
Operation opt; // 函数指针
} STR;
现在来定义两个函数:Add和Multi:
//a和b相加
int Add (int a, int b){
return a + b ;
}
//a和b相乘
int Multi (int a, int b){
return a * b ;
}
现在我们可以写main函数,并且将函数指针指向正确的函数:
int main (int argc , char **argv){
STR str_obj;
str_obj.opt = Add; //函数指针变量指向Add函数
str_obj. result = str_obj.opt(5,3);
printf (" the result is %d\n", str_obj.result );
str_obj.opt= Multi; //函数指针变量指向Multi函数
str_obj. result = str_obj.opt(5,3);
printf (" the result is %d\n", str_obj.result );
return 0 ;
}
运⾏结果如下:
the result is 8
the result is 15
完整的代码如下:
#include<stdio.h>
typedef int (*Operation)(int a, int b);
typedef struct _str {
int result ; // to sotre the resut
Operation opt; // funtion pointer
} STR;
//a和b相加
int Add (int a, int b){
return a + b ;
}
//a和b相乘
int Multi (int a, int b){
return a * b ;
}
int main (int argc , char **argv){
STR str_obj;
str_obj.opt = Add; //函数指针变量指向Add函数 str_obj. result = str_obj.opt(5,3);
printf ("the result is %d\n", str_obj.result );
str_obj.opt= Multi; //函数指针变量指向Multi函数 str_obj. result = str_obj.opt(5,3);
printf ("the result is %d\n", str_obj.result );
return 0 ;
}。