C语言 结构体

目录

1.结构体的声明

1.1结构体是什么?

1.2声明

1.3结构成员的类型

1.4结构体变量的定义和初始化

(1)定义

(2)初始化

2.结构体成员的访问

3.结构体传参

4.结语


1.结构体的声明

1.1结构体是什么?

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2声明

结构体关键字 结构体标签

Struct tag

{

Member -- list;//成员列表

}variable-list;//变量列表(可有可无)

例如

cpp 复制代码
struct peo
{
	char name[20];
	char tele[12];//成员变量
	char sex[5];//男 女 保密 为了保证是个字符串,在末尾加上一个\0
	int high;
}p1,p2;//这里的分号不能丢
//p1和p2是使用struct peo结构类型创建的2个变量
//p1和p2是两个全局的结构体变量,所以尽量少这么创建

1.3结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

1.4结构体变量的定义和初始化

(1)定义

cpp 复制代码
struct peo
{
	char name[20];
	char tele[12];//成员变量
	char sex[5];//男 女 保密 为了保证是个字符串,在末尾加上一个\0
	int high;
}p3,p4;//声明类型的同时定义变量p1
cpp 复制代码
struct peo p5, p6;//定义结构体变量p5,p6
cpp 复制代码
struct peo
{
	char name[20];
	char tele[12];//成员变量
	char sex[5];//男 女 保密 为了保证是个字符串,在末尾加上一个\0
	int high;
}p3,p4;

struct St
{
	struct peo p;
	int num;
	float f;
};

(2)初始化

cpp 复制代码
#include <stdio.h>
struct peo
{
	char name[20];
	char tele[12];//成员变量
	char sex[5];//男 女 保密 为了保证是个字符串,在末尾加上一个\0
	int high;
};

struct St
{
	struct peo p;
	int num;
	float f;
};

int main()
{
	struct peo p1 = { "张三","15519344509","男",181 };//结构体变量的创建以及初始化
	struct St s = { {"李四","16666666666","女",160},100,3.14f };//浮点数在内存中不能精确保存

	printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
	printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
	return 0;
}

2.结构体成员的访问

结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。

普通的访问例子如上一个举例的代码

如果是指针访问请看3

3.结构体传参

cpp 复制代码
#include <stdio.h>
void print1(struct peo* pe)
{
	printf("%s %s %s %d\n", pe->name, pe->tele, pe->sex, pe->high);//结构体指针->成员变量
}

void print2(struct peo p)
{
	printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);//结构体变量.成员变量
}
//
int main()
{
	struct peo p1 = { "张三","15519344509","男",181 };//结构体变量的创建以及初始化
	struct St s = { {"李四","16666666666","女",160},100,3.14f };//浮点数在内存中不能精确保存
	print1(&p1);
	print2(p1);
	return 0;
}

print1运用的是指针访问->p1的地址

而print2是直接将实参p1拷贝到形参p里面,占用的空间较大

print1函数的传参更好用

函数传参的时候,参数是需要压栈的。

如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的 下降

结论:结构体传参的时候,要传结构体的地址。

4.结语

今天的经验分享就到这里,有喜欢的朋友可以点赞➕评论➕收藏➕关注,如果有不懂的地方可以咨询博主,谢谢大家支持博主!

相关推荐
RainCity8 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
刘马想放假3 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠4 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
LinXunFeng8 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
Darling噜啦啦11 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
LDR00612 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术12 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园12 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob12 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
小小工匠12 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化