#include <stdio.h>
#include <malloc.h>
typedef struct Value //只有结构体变量才分配地址,而结构体的定义是不分配空间的
{
int dat;
char str;
}Value;
typedef struct Fun{ //只有结构体变量才分配地址,而结构体的定义是不分配空间的
int a,b;
int m,n;
void(*print)(void); //函数指针,是一个指针变量,指向某个函数的地址,
int (*add)(int a,int b); //即可实现该函数的功能.
int (*returnVal)(void);
void(*test)(int m,int n);
}Fun;
/*****************************************************/
void print(void)
{
printf("Print success!\n");
}
int add(int a,int b)
{
return a+b;
}
int returnVal(void)
{
return 1024;
}
void TEST(int j,int k)
{
printf("TEST():%d\n",j+k);
}
/****初始化一个结构体变量****/
Fun f = {
.a = 1,
.b = 5,
.m = 10,
.print = print,
.add = add,
.returnVal = returnVal,
.test = TEST //将结构体test函数地址,指向TEST真正存在的函数
};
/*****************************/
int main(void)
{
Value *va = (Value*)malloc(sizeof(Value)); //初始化一个Value结构体的变量
Fun *t = (Fun*)malloc(sizeof(Fun));
(*t).n = 13; //等价于t->n = 13;
va->dat = 12;
printf("va->dat:%d\n",va->dat);
printf("t->n:%d\n",t->n);
print();
printf("%d\n",f.add(f.a,f.b));
printf("%d\n",f.returnVal());
f.test(f.m,18); //传入参数既可以是结构体变量f里的值,也可以外部输入
TEST(50,100);
return 0;
}
C语言结构体函数指针
最新推荐文章于 2024-09-18 23:24:16 发布