20230921数据结构-结构体

前言

结构体是一种用于组合多个不同类型的数据元素的数据结构。可以将不同类型的数据打包在一起,作为一个自定义的新类型进行操作。

一、定义

struct <结构体名称>{
<数据类型><变量名称>;
//…
};

struct ABC{
	int id;
	char name[20];
	//...
};

二、特点

1、组合不同类型的数据

结构体允许将多个不同类型的数据成员组合成一个单一的实体。通过定义结构体,可以组织多种类型数据,形成更复杂的数据结构。

2、自定义数据类型

结构体本社你说一种用户自定义的数据类型。可以根据需求定义结构体,作为一个新类型名称,并在程序中声明和使用该类型的变量。

3、按照成员顺序存储

结构体的成员会按照定义顺序在内存中连续存储,这样可以方便地访问和操作结构体的成员。

4、成员访问

可以使用成员操作符".“来访问结构体的成员。通过结构体变量的名称加”."再加要访问的成员名称,就可以获取或修改结构体的成员。

5、结构体大小和对齐

结构体的大小取决于其成员大小和对齐要求。对齐要求是出于效率和内存访问的考虑,编译器会在结构体的成员之间增加一些填充字节,以确保成员按照规定的边界对齐。

struct ABC{
	char a;
	int b;
	char c;
};

在一些编译器中,结构体成员的内存对齐是根据其大小和对齐要求进行的。具体的对齐规则可能因不同的编译器、操作系统和编译选项而有所差异。
在上述示例中,假设"char"类型占用1字节,"int"类型占用4字节,计算结构体大小并考虑对齐要求。
“char a”:1字节,对齐要求1字节。
“int b”:4字节,对其要求4字节,由于前一个成员为1字节的"char"类型,需要对前一个成员补齐。
“char c”:1字节,由于前面已有4字节的"int"类型,需要在此补齐。
对齐后,结构体大小为:(1字节+3字节填充)+4字节+(1字节+3字节填充)=12字节

struct ABC{
	char a;
	char b;
	char c;
	char d;
	char e;
	int f;
};

在上述示例中,假设"char"类型占用1字节,"int"类型占用4字节。
因为含有"int f"因此以4字节作为对其标准,"char a-char d"共占用四字节,"char e"占用1字节自动在此填充3字节。
对齐后,结构体大小为:(1字节+1字节+1字节+1字节)+4字节+(1字节+3字节填充)=12字节

三、优缺点

1、优点

能够将多种类型数据整合,访问更加便利;结构体允许将数据共享到不同的函数或模块中,方便数据的传递和共享(将多个参数作为一个整体传送)。

2、缺点

占用内存,结构体在内存中需要按照对齐规则进行内存布局,额外引入填充字节,增加内存占用;由于结构体的内存对齐规则,在读取结构体中的成员变量可能会引入内存访问的延迟;结构体的设计如果不合理可能会影响代码的可维护性,当结构体定义发生改变时,可能需要修改依赖于该结构体的其他代码。

四、操作

#include <stdio.h>
#include <string.h>

struct People{
	char name[20];
	int age;
};

int main(){
	//创建结构体实例
	struct People p;
	
	//访问和修改结构体成员
	strcpy(p.name,"Tom");
	p.age=20;
	
	//打印结构体成员
	printf("Nmae:%s\n",p.name);
	printf("Age:%d\n",p.age);
	
	return 0;
}
#include <iostream>
#include <string>

struct People{
	std::string name;
	int age;
};

int main(){
	//创建结构体实例
	People p;
	
	//访问和修改结构体成员
	p.name="Tom";
	p.age=20;
	
	//打印结构体成员
	std::cout<<"Nmae:"<<p.name<<std::endl;
	std::cout<<"Age:"<<p.age<<std::endl;
	
	return 0;
}

五、应用场景

1、表示实体对象

结构体可以用来表示实体对象的属性和状态,例如表示一个人,可以包含其姓名、年龄等多个属性字段。

2、数据记录和存储

结构体可以用来组织和存储多个相关的数据记录,例如在数据库中的表格行或日志文件中的日志记录,以及表示数据的列名或字段。

3、数据传递和参数传递

结构体可以作为函数参数来传递相关的数据,作为函数的输入或输出结果,简化函数调用的参数列表。

4、数据结构和复杂类型

结构体可以作为其他数据结构的成员,用于创建更复杂的数据类型,例如在链表、树等数据结构中作为存储节点信息,或作为指向其他节点的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值