C语言结构体struct中定义函数指针的方法详解

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

一、 定义结构体

struct data_demo
{
	int result;
	int (*add)(int, int);
	int (*sub)(int, int);
};

二、 完整示例

#include <stdio.h>

struct data_demo
{
	int result;
	int (*add)(int, int);
	int (*sub)(int, int);
};

int add_demo(int i, int j)
{
	return i+j;
}

int sub_demo(int i, int j)
{
	return i-j;
}

int main(void)
{
	struct data_demo data =  {0, add_demo, sub_demo};
	
	// 也可以如下初始化结构体 完全等价
	/*
	struct data_demo data =  
	{
		.result = 0,
		.add = add_demo,
		.sub = sub_demo
	};
	*/

	data.result = data.add(20, 30);
	printf("add:\t%d\n", data.result);

	data.result = data.sub(30, 20);
	printf("sub:\t%d\n", data.result);

	return 0;
}

三、 运行结果

[ycxie@fedora Workspace]$ gcc -o struct_demo struct_demo.c -Wall
[ycxie@fedora Workspace]$ ./struct_demo
add:	50
sub:	10

Leave a Reply

Your email address will not be published. Required fields are marked *