C语言结构体中的函数指针

来源:互联网 发布:昆明达内大数据培训 编辑:程序博客网 时间:2024/05/21 17:47

C语言结构体中的函数指针

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。所以标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展。那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的。

1. 函数指针

一般的函数指针可以这么定义:

int(*func)(int,int);

表示一个指向含有两个int参数并且返回值是int形式的任何一个函数指针. 假如存在这样的一个函数:

int add2(int x,int y)

{

return x+y;

}

那么在实际使用指针func时可以这样实现:

func=&add2; //指针赋值,或者func=add2; add2与&add2意义相同

printf("func(3,4)=%d"n",func(3,4));

事实上,为了代码的移植考虑,一般使用typedef定义函数指针类型.

typedef int(*FUN)(int,int);

FUN func=&add2;

func();

2.结构体中包含函数指针

其实在结构体中,也可以像一般变量一样,包含函数指针变量.下面是一种简单的实现.

#include "stdio.h"

struct DEMO

{

int x,y;

int (*func)(int,int); //函数指针

};

int add2(int x,int y)

{

return x+y;

}

void main()

{

struct DEMO demo;

demo.func=&add2; //结构体函数指针赋值

printf("func(3,4)=%d"n",demo.func(3,4));

}
1 0