首页 > 其他分享 >结构体三种实例化方法(含成员函数)

结构体三种实例化方法(含成员函数)

时间:2024-03-16 09:33:21浏览次数:19  
标签:初始化 函数 int stru 实例 三种 str hello 结构

结构体成员函数三种实例化方法

结构体成员函数需要定义成指针函数,定义函数,但不在结构体内实现方法, 在外部(需要在函数体内部实现)

结构体指针使用->符号访问

结构体直接实例化使用.符号访问成员

第一种 : 结构体直接实例化

#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 = &num;
	// 直接对结构体进行初始化, 不使用指针.
	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 = &num;
	
    // 使用结构体指针初始化,申请该结构体大小相同内存
	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

相关文章

  • C++函数调用优化
    C++函数调用优化施磊老师网课笔记截图1、用临时对象拷贝构造一个新对象的时候,编译器会对其优化,直接用生成临时对象的方法构造新对象;......
  • .Net WebApi中实现自动依赖注入的三种方法
    前言该文仅供学习参考,如有问题请指正。依赖关系注入(DI),是一种软件设计模式,这是一种在类及其依赖项之间实现控制反转(IoC)的技术。.NET中的依赖关系注入是框架的内置部分,与配置、日志记录和选项模式一样。生命周期依赖注入有以下三种生命周期瞬时(Transient):每次......
  • C++ Function Templates (函数模板)
    C++FunctionTemplates[函数模板]1.TemplatesandGenericProgramming(模板与泛型编程)2.DefiningaFunctionTemplates(定义函数模板)2.1.InstantiatingaFunctionTemplate(实例化函数模板)2.2.TemplateTypeParameters(模板类型参数)2.3.Non......
  • 20240315,逻辑类型,条件和逗号,函数,数组
    刚好看到逻辑类型,今天早上有个很好玩的事情,一早上醒来圆圆的小狗跑到了床下,然后她说“你是不是打我的小狗了”我;”我没有,我什么都不知道””他的屁股都扁了“我:“我怎么知道,他的屁股扁了关我什么事"“你怎么知道他的屁股扁了”我“不是你说的嘛”“我诈你的”,然后走了......
  • 函数方法定义
    publicclassday_5_1{publicstaticvoidmain(String[]args){/*方法,函数什么是方法?具有特定功能的一段独立小程序方法作用?1,提高了代码的复用性2,提高了代码的维护性方法的定义格式?......
  • 字符串函数和内存函数
    简介:本文将介绍常使用的字符串函数和内存函数,以及对其进行模拟实现,以便能够更好的理解这些函数的使用1、常见的字符串函数常用的字符串函数有strcpy,strcat,strcmp,strncpy,strncat,strncmp,strstr等。这些函数是针对字符串进行操作的,这些函数都需要包含头文件string.h,下面逐......
  • 语义分割、实例分割、全景分割
    语义分割:实例分割:全景分割:UNetUnet包括两部分,可以看右图,第一部分,特征提取,VGG类似。第二部分上采样部分。由于网络结构像U型,所以叫Unet网络。特征提取部分,每经过一个池化层就一个尺度,包括原图尺度一共有5个尺度。上采样部分,每上采样一次,就和特......
  • OpenMP - runtime库函数
    常用函数。#include<iostream>#include<omp.h>#defineNUM_THREADS16usingnamespacestd;intmain(intargc,char*argv[]){omp_set_num_threads(NUM_THREADS);#pragmaompparallel{cout<<"threadnum:"<&......
  • Python 函数的不定长参数介绍 -- argc/*argcs/**kargcs
    目录一.前言二.Python不定长参数argc/*kargcs简介1.函数不定长参数*args使用2.函数不定长参数**kwargs使用3.函数不定长参数*args和**kwargs只能放在形参的末尾,顺序不能错.三.Python不定长参数argc/*kargcs实战四.Python不定长参数argc/*kargcs总结五......
  • 全新芒果YOLOv8改进专栏 | 专栏目录:目前已有100+篇内容,内含各种Head检测头、标签分配
    内含各种Head检测头、标签分配策略、损失函数Loss、Backbone、Neck、写作|指标、NMS等全方位创新点改进全新芒果YOLOv8改进专栏来袭: 专栏地址......