结构

结构(struct)

注意:命名开头大写!
什么是结构
一种程序员自己设计的数据类型,由若干个不同的数据类型组成,可用于描述一个事物的各项数据

设计结构

			struct 结构名
			{
				类型1 成员名1:n;  // 可以用n指定成员使用的字节数
				类型2 成员名2;
				类型3 成员名4;
				...
			};

定义结构变量

			struct 结构名 结构变量名

注意:struct关键字不能省略

访问成员

			结构变量名.成员名

用字符串strcpy进行赋值
打印: str[ ] -> strcpy -> %s ; str -> = ’ ’ -> %c

初始化

结构变量与普通变量一样,默认值是不确定的

	1、	struct 结构名 结构变量名 = {"张三",'m',"销售"}

注意:要按照成员的顺序初始化,顺序不可变,若少初始化了,则后面的默认为0
2、 初始化指定的成员

		struct 结构名 结构变量名  = {.成员名 = 'f',...}
		eg.  					= {.post = "秘书",.name = "张三"}

:可不按顺序,{}中没初始化的成员(sex)及和数组一样默认为0

typedef

类型重定义,可以给已有的数据类型重定义一个简短的名字
struct 结构名是一种类型,typedef可以把他们两个重定义成一个单词的数据类型
注意:struct可以定义匿名结构,但要立即定义结构变量,或使用typedef对匿名结构重定义,但不建议

eg.			typedef struct Student Student
		或	typedef struct Student
		  	{
				...
		  	}Student;

相当于将struct Student取名为Student,和#define相似
注意:typedef与#define只是相似,本质不同,#define仅仅是内容替换,而typedef是重定义一个类型,比如:

		typedef int* intp; 	 -> 能将p1,p2都定义成int*
		#define intp int* 	 -> 只有p1是指针,p2不是
		intp p1,p1;

在堆内存中存储结构变量

结构体占内存较多/字节数比较大,因此不适合存储在栈内存中,一般存放在堆内存中
在堆内存中分配一块内存,大小为结构体大小的字节数,然后用结构指针指向它

		struct Student* stup = malloc(sizeof(struct Student));

使用结构指针访问成员名:

1、结构指针->成员名

eg. 	p->name, &p->sex

2、(*结构指针).成员名

eg. 	(*p).name 

注意:’ . '的运算级别比*高,所以要加( )

计算结构的字节数

1、结构成员的顺序会影响结构的字节数,因此设计结构体时,选择合适的成员顺序可以尽可能的节约内存
2、结构的每个成员都有自己的存储空间,因此结构的字节数是所有成员的字节数总和还要多
3、结构类型为了能够快速地访问成员,会对成员的存储位置进行对齐和补齐
对齐
(假定每个结构都是从零地址开始)每个成员存储的内存编号必须是它本身字节数的整数倍,如果不是整数倍则使用后面的内存(结构的成员之间可能会有一些空隙)(33’)
补齐
结构体的字节数必须是它最大成员的整数倍,如果不是则填充一些空字节
注意:在Linux系统下,计算补齐和对齐时,超出4的按4计算,Windows下正常计算

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值