C语言:结构体(详细讲解)

目录

结构体类型的声明

结构声明

描述一个学生

结构体的创建和初始化​编辑

结构体的⾃引⽤

结构体的特殊声明

结构体内存对⻬

对⻬规则

练习1

练习2

练习3

练习4-结构体嵌套问题

为什么会存在内存对⻬

修改默认对⻬数

结构体的传参

结构体实现位段

什么是位段

​编辑

位段前

位段后

位段的内存分配

位段的跨平台问题

位段的应⽤

‘’位段使⽤的注意事项


结构体类型的声明

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

结构声明
struct a
{
	int a;
	char b;
};
描述一个学生
struct a//描述一个学生
{
	char xm[20];//姓名
	int nl;//年龄
	char xb[5];//性别
	int xh[20]//学号
};

结构体的创建和初始化

#include<stdio.h>
struct a//描述一个学生
{
	char xm[20];//姓名
	int nl;//年龄
	char xb[5];//性别
	char xh[20];//学号
};

int main()
{
	//按照结构体成员的顺序初始化
	struct a xiao = { "小米",18,"男","10080112"};
	//打印结构体
	printf("姓名 = %s\n", xiao.xm);
	printf("年龄 = %d\n", xiao.nl);
	printf("性别 = %s\n", xiao.xb);
	printf("学号 = %s\n", xiao.xh);
	printf("------------------------------------\n");
	//按照指定的顺序初始化
	struct a haha = { .xb = "男",.xh = "200457893",.xm = "熊猫",.nl = 22 };
	//打印结构体
	printf("姓名 = %s\n", haha.xm);
	printf("年龄 = %d\n", haha.nl);
	printf("性别 = %s\n", haha.xb);
	printf("学号 = %s\n", haha.xh);
}

结构体的⾃引⽤

在结构中包含⼀个类型为该结构本⾝的成员是否可以呢?
⽐如,定义⼀个链表的节点:

错误的⾃引⽤:

struct a
{
	int data;
	struct a p;
};

上述代码正确吗?如果正确,那 sizeof(struct Node) 是多少?
仔细分析,其实是不⾏的,因为⼀个结构体中再包含⼀个同类型的结构体变量,这样结构体变量的⼤
⼩就会⽆穷的⼤,是不合理的。

正确的自引⽤:

struct a
{
	int data;
	struct a *p;
};


结构体的特殊声明

在声明的时候可以不完全声明

//在上⾯代码的基础上,下⾯的代码合法吗?
p = &x;

编译器会把上⾯的两个声明当成完全不同的两个类型,所以是⾮法的。
匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。


结构体内存对⻬

当我们会了结构体的创建和声明

那结构体的⼤⼩是多少呢?

<
评论 65
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落叶 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值