自定义类型之结构体详解

本文详细介绍了C语言中的结构体,包括结构体的基础知识,如声明、初始化、数组初始化和自引用,以及进阶内容,如内存对齐、结构体传参和位段的使用。结构体的自引用通过指针避免了无限递归的问题,内存对齐则涉及到编译器的规则和效率问题,位段则是一种节省空间的技巧,但存在跨平台的不确定性。
摘要由CSDN通过智能技术生成

目录

前言

一.结构体的基础知识

1.结构体的声明

2.创建变量和初始化

3.结构体数组的初始化

4.结构体的自引用

二.结构体的进阶知识

1.结构体内存对齐

2.结构体传参

3.位段


前言

首先c语言中内置类型很多包括int,float,char,double,short等等,但是实际生活中有很多对象是无法用一种内置类型来描述的,比如描述中学生,一个学生首先是姓名,接着有班级,专业和学号,这里我们就需要从四个方面去描述,所以我们需要创建一个自定义类型来包含用于描述的四个变量。本文讲解的是自定义类型之一,结构体。

一.结构体的基础知识

结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量,如这里的学生的姓名是char型,而学号是int型。

1.结构体的声明

如何声明一个结构体呢?

struct student
{
	char name[10];
	char major[20];
	int class;
	int ID;
};

这里就是声明了一个标签叫student的结构体类型,结构体类型中包含的就是成员变量,比如这里的name,major,class,ID。注意这里的student并不是变量,它和struct一起组成了一个结构体类型,比如:int表示整型,而这里struct student表示一个结构体类型。

那么有没有可能不写结构体标签student声明函数呢?

struct 
{
	char name[10];
	char major[20];
	int class;
	int ID;
}sd1;//匿名结构体

这里结构体并没有写上标签名,这种声明在c语言中是被允许的,称为匿名结构体,但是这种声明你想要创建变量就只能选择在后面直接写上变量的名称。

2.创建变量和初始化

我们拥有了一个结构体类型,那么我们想要用这个结构体类型去创造一个变量该怎么做呢?

这里有两种方式:

struct student
{
	char name[10];
	char major[20];
	int class;
	int ID;
}sd1,sd2;//全局变量
int main()
{
	struct student sd3;//局部变量
	struct student sd4;
}

首先第一种是直接在结构体声明的后面直接写上变量的名称,如这里的sd1,sd2。

第二种是像int,char,float一样的创建变量,如这里的sd3,sd4。

sd1,sd2和sd3,sd4的不同在于一个是全局变量,一个是局部变量。

你也可以用第一种方法创建局部变量。

int main()
{
	struct student
	{
		char name[10];
		char major[20];
		int class;
		int ID;
	}sd1, sd2;//局布变量
}

也可以用第二种方法创建全局变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值