结构体成员函数三种实例化方法
结构体成员函数需要定义成指针函数,定义函数,但不在结构体内实现方法, 在外部(需要在函数体内部实现)
结构体指针使用->符号访问
结构体直接实例化使用.符号访问成员
第一种 : 结构体直接实例化
#include <stdio.h>
// 在此初始化结构体,内部成员函数定义为指针函数
struct stru{
void (*hello)(char *str, int *a);
};
// 定义一个同型函数,用于方法实现
void hello_u(char *str, int *a){
printf("func of hello, %s \r\n", str);
printf("%d \r\n", *a);
}
int main(){
char str[10] = "hhhhh";
int num = 10;
int *pa = #
// 直接对结构体进行初始化, 不使用指针.
struct stru stru_inst;
// 结构体成员函数进行初始化
stru_inst.hello = hello_u;
// 结构体成员函数调用
stru_inst.hello(str, pa);
return 0;
}
在以上实现过程中,对结构体进行定义,成员函数使用函数指针,结构体实例化的方法使用直接例化(未使用指针),对结构体函数进行函数赋值,最终调用.
第二种 : 结构体指针例化
#include <stdio.h>
#include <stdlib.h>
struct stru{
void (*hello)(char *str, int *a);
};
void hello_u(char *str, int *a){
printf("func of hello, %s \r\n", str);
printf("%d \r\n", *a);
}
int main(){
char str[10] = "hhhhh";
int num = 10;
int *a = #
// 使用结构体指针初始化,申请该结构体大小相同内存
struct stru *stru_inst = (struct stru *)malloc(sizeof(struct stru));
// 初始化结构体成员函数方法
stru_inst->hello = hello_u;
// 结构体成员函数调用
stru_inst->hello(str, a);
// 释放内存
free(stru_inst);
return 0;
}
上述该方法使用结构体指针来进行结构体初始化,先向内存申请一块结构体大小相同内存来进行初始化,再使用->来进行函数初始化以及调用,最后释放掉内存
第三种 : 使用.member = value进行结构体赋值
#include <stdio.h>
struct stru{
int a;
void (*hello)(char *str, int *a);
};
void hello_u(char *str, int *a){
printf("func of hello, %s \r\n", str);
printf("%d \r\n", *a);
}
int main(){
char str[10] = "hhhhh";
int b = 10;
int *pa = &b;
struct stru stru_u{
.a = b,
.hello = hello_u
};
printf("stru_u.a is %d\r\n", stru_u.a);
stru_u.hello(str, pa);
return 0;
}
此段代码同方法一一样的初始化方法,不同在于使用 .成员 = 赋值 来进行初始化
总结
对于struct stru stru_u
初始化方法, 直接进行实例化,使用范围比较局限
对于struct stru *stru_u
初始化方法, 使用范围较广, 因为本质是一个指针,可以一直传递处理
上面主要讲述了三种结构体初始化方法, 主要针对于成员函数进行展开,一般常用数据类型对于各位不在话下, 文中有部分概念使用有误,相信大家明白意思就行.
标签:初始化,函数,int,stru,实例,三种,str,hello,结构 From: https://www.cnblogs.com/tiruo/p/18076705