自定义类型:结构体 枚举 联合

文章介绍了结构体的基本概念,包括匿名结构体的特性,结构体的自引用示例,以及如何初始化结构体成员。同时,讨论了内存对齐的原则和如何通过调整对齐数来优化空间使用。此外,提到了位段的概念,强调位段在节省空间但可能影响可移植性的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体

 

结构的基础知识:

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

此时s1,s2为全局变量。

特殊的声明:

匿名结构体类型 

只能用一次,创建之后直创建变量,因为没有名字,无法再在main函数中再创建变量。

结构的自引用

struct Node
{
   int data;
   struct Node* next
};

结构体也可以乱序初始化。

int main()
{
	struct Point p3 = {1,2};
	struct S s = { 100, 'w', {2,5}, 3.14f};
	struct S s2 = {.d=1.2f, .p.x=3,.p.y=5, .ch = 'q', .num=200};
	printf("%d %c %d %d %f\n", s.num, s.ch, s.p.x, s.p.y, s.d);
	printf("%d %c %d %d %f\n", s2.num, s2.ch, s2.p.x, s2.p.y, s2.d);

	return 0;
}

结构体内存对齐

 要想节省空间,又要保证对齐,就要尽量保证占用内存小的成员放在一起。

*数组在对齐中把数组理解为同类型的多个元素。

修改默认对齐数 

VS环境之下默认对齐数是8.

#pragma pack()

此预处理指令可以修改默认对齐数。

结构体传参 

首选传地址的方式

位段 

位段的成员必须是int,unsigned int,signed int.

成员名后有一个冒号和一个数字。 

位段中的位指的是二进制位。数字代表的是所需此类型的比特位,会大大节省空间。

例如 int a:1   即内存只占用一个比特位的空间。

位段的作用与结构体类似。但位段是不跨平台的,注意可移植的程序避免使用位段。

但数字不能大于前边类型的大小。

位段是按照需求系统开辟内存(即一个字节不够用了,系统才会再开辟一个字节)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值