结构体中的函数指针

C语言是可以在结构体中定义函数的。

将函数当作一个指针变量来看待就容易理解了。

func.h

#ifndef FUNC_H
#define FUNC_H
typedef struct data {
    char* name;
    int (*func_2)(char* name);
}data;

int func_1(char* name);
#endif  /* #ifndef FUNC_H */

func.c

#include <stdio.h>

int func_1(char* name){
    printf("func_1 : %s\n", name);
    return 0;
}

main.c

#include <stdlib.h>
#include "func.h"

void main(){
    struct data* d;
    d = (struct data*)malloc(sizeof(struct data*));
    d->name = "ssh";
    d->func_2 = func_1;
    d->func_2(d->name);
}

编译运行:

$ gcc -o main main.c func.c
$ ./main
func_1 : ssh