【C语言基础】教你弄懂结构如何计算大小(结构体的内存对齐)

本文详细介绍了C语言中的结构体、枚举和联合的使用,包括结构体的声明、初始化、传参和内存对齐规则。重点讲解了结构体计算大小的内存对齐原理,并通过实例解释了为何存在内存对齐的原因。同时,文章还讨论了位段的概念、声明和内存分配,以及枚举类型的定义、优点和使用。最后,简述了联合的特点和大小计算。
摘要由CSDN通过智能技术生成


请添加图片描述

前言

前面我们学习过很多数据类型,包括整数家族,浮点数家族,还有指针,数组等,今天学习三种自定义类型,结构,枚举与联合

文章目录

结构体

结构体的声明

和数组一样,结构体也是一种聚合类型数据。和数组不同的是,数组只能存放相同类型的元素,而结构体里面可以保罗万象,每一个成员可以具有不同的类型。

基本形式

struct tag
{
   
 member-list;
}variable-list;

我们可以在申明结构体的时候就定义变量,如:

struct {
   
	int a;
	char b;
	float c;
}x;

这种没有给出结构名的形式只能在申明的时候定义结构体变量,如果有其他的新增的结构体变量,就只能再定义一遍,所以不推荐使用。我们可以给它加上一个名称。如:

struct Stu
{
   
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}; //分号不能丢

这种形式我们可以在声明的后面跟上变量名直接创建变量,如:

struct Stu
{
   
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}x,y[20],*z; //分号不能丢

上面的代码就是创建了一个名称为x的结构体,一个数组名为y的结构体数组,以及指向这样一个结构体类型的指针z;
我们也可以在声明之后再定义变量,如:

struct Stu
{
   
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}; //分号不能丢
struct Stu x,y[20],*z;

效果和上面是完全一样的,但是如果嫌每次定义变量都要跟上一个struct。我们不妨使用typedef。如:

typedef struct Stu
{
   
 char name[20];//名字
 int age;//年龄
 char sex[5];//性别
 char id[20];//学号
}Stu; //分号不能丢
Stu x,y[10],*z;

这样我们就可以使用Stu来定义结构体变量了。

结构体的初始化

用几段代码就能搞清楚初始化:

struct Point
{
   
 int x;
 int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
//初始化:定义变量的同时赋初值。
struct Point p3 = {
   x, y};
struct Stu        //类型声明
{
   
 char name[15];//名字
 int age;      //年龄
};
struct
  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值