C——结构体中的函数指针

来源:互联网 发布:程序员面试金典 pdf 编辑:程序博客网 时间:2024/05/20 07:35

在学习驱动程序的时候,代码中常常看到各种结构体,结构体中也有各种函数指针。在这里复习一下结构体,以及指针函数。 
结构体一般有以下几种形式的用法: 
1、先定义结构类型再定义变量 
如:

struct xx{    成员变量列表;……    ……};struct xx *指针变量名;变量初始化:struct xx 变量名={初值1,初值2,……,初值n};

2、在定义结构类型的同时也定义变量 
如:

struct xx {    成员变量列表;……    ……} *指针变量名;

3、直接定义变量,用无名结构体直接定义变量只能一次

struct{    成员变量列表;…}*指针变量名;

其中“指针变量名”为结构体指针变量的名称。形式1是先定义结构体,然后再定义此类型的结构体指针变量;形式2和形式3是在定义结构体的同时定义此类型的结构体指针变量。

附上一个小程序加深理解:

#include<stdio.h>#include<stdlib.h>struct test_fun  //该结构体里面有三个成员,是三个函数指针{    int (*add)(int a, int b);    int (*sub)(int a, int b);    int (*mul)(int a, int b);};static int t_add(int a, int b)//求和函数{    return (a+b);}static int t_sub(int a, int b)//相减函数{    return (a-b);}static int t_mul(int a, int b)//相乘函数{    return (a*b);}struct test_fun fun={     //如何给函数指针赋值    .add = t_add,    .sub = t_sub,    .mul = t_mul,};int main(int argc, char **argv){    int a,b;    if(3 != argc)    {        printf("please input :%s num1 num2\n",argv[0]);        return -1;    }    a = atoi(argv[1]);    b = atoi(argv[2]);    printf("a+b=%d\n",fun.add(a,b));    printf("a-b=%d\n",fun.sub(a,b));    printf("a*b=%d\n",fun.mul(a,b));    return 0;}
0 0
原创粉丝点击