第十九章(自定义类型:结构体)

1. 结构体类型的声明

2. 结构体变量的创建和初始化

3. 结构成员访问操作符

4. 结构体内存对⻬

5. 结构体传参

一、结构体类型的声明

1.1结构体的声明

struct student
{
	int age;
	int id[10];
	char name[10];
};

1.2 结构体变量的初始化

struct student
{
	int age;
	char id[10];
	char name[10];
};

int main()
{
	// 1. 按照顺序初始化
	struct student s = { 18,"22021111","张三" };
	printf("%d %s %s\n", s.age, s.id, s.name);
	//2. 不按顺序初始化 
	struct student s1 = { .id = "2222555",.age = 28,.name = "王五"};
	printf("%d %s %s\n", s1.age, s1.id, s1.name);

	return 0 ;
}

三、这里我们在原来的知识中已经介绍过了

这里我们需要注意的是,我们在使用结构体的时候,尽量要给结构体变量命名。

四、结构体内存对齐
我们通过上边的学习已经初步掌握了结构体的基本使用了。
现在我们深入讨论一个问题:计算结构体的大小。
这也是一个特别热门的考点:结构体内存对齐

4.1 结构对齐
我们首先需要知道对齐规则
注意:这里需求到一个偏移量的知识
在这里插入图片描述
我们来举例子练习一下

#include<stdio.h>
struct s1
{
	char a1;
	int  a2;
	int a3;
};
int main()
{

	printf("%zd\n", sizeof(struct s1));
	return 0;
}

在这里插入图片描述

struct s3
{
	char nun1;
	int  nun2;
	double nun3;
};
int main()
{

	printf("%zd\n", sizeof(struct s3));

	return 0;
}

在这里插入图片描述
在这里插入图片描述

struct s3
{
	char nun1;
	int  nun2;
	double nun3;
};

struct s4
{
	char b1;
	struct s3;
	int b2;
};
int main()
{

	printf("%zd\n", sizeof(struct s4));

	return 0;
}

在这里插入图片描述

在这里插入图片描述

五、结构体传参
我们从两方面解释
1.传值
2.传址

struct s1
{
	int a ;
	char name[20];
};
void print_data(struct s1 num)//传值
{
	num.a = 20;
	printf("%d\n", num.a);
}
void print_score(struct s1* pr)  //传址
{
	pr->a = 30;
	printf("%d\n", pr->a);

}
int main()
{
	struct s1 num = { 10,"lisi" };
	print_data(num);
	printf("%d\n", num.a);
	print_score(&num);
	printf("%d\n", num.a);

	return 0;
}

结论:在我们传参的时候,要传结构体的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值