C结构体、共用体、typedef(数组、指针)

一、结构体概述(struct)

1. 结构体的定义

语法: 

struct  结构体名 
{ 
		结构体成员列表 
};

2. 结构体的使用

  1. struct 结构体名 变量名
  2. struct 结构体名 变量名 = {成员1值,成员2值…}
  3. 定义结构体时顺便创建变量

在这里插入图片描述

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

二、结构体数组

作用
将自定义的结构体放入到数组中方便维护

语法
struct 结构体名 数组名[元素个数] = {{},{},……{}}

在这里插入图片描述

三、结构体指针

作用
通过指针访问结构体中的成员
语法
struct 结构体名 *指针名;
利用操作符 -> 可以通过结构体指针访问结构体属性
在这里插入图片描述
利用指针访问结构体数组
在这里插入图片描述

四、结构体嵌套、大小及位域

1. 结构体嵌套

含义 
结构体中的成员可以是另一个结构体 

语法 
struct  结构体名 
{ 
	struct 结构体名   成员名; 
};

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

2. 结构体大小

(1)结构体大小

在这里插入图片描述

(2)字节对齐

含义:
字节对齐主要是针对结构体而言的,通常编译器会自动对其成员变量进行对齐,以提高数据存取的效率;
作用:
平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

(3)结构体大小的计算方法

  1. 自身对齐
  2. 默认对齐
  3. 有效对齐

在这里插入图片描述

3. 位域

(1)位域的定义

所谓的“位域”是把一个字节中的二进制位分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。

(2)位域变量的说明

位域的一般形式: 
struct 位域结构体名 
{ 
	位域列表; 
}; 

其中位域列表的形式为: 
类型说明符  位域名:位域长度

struct  位域结构体名  变量名 
struct  位域结构体名  变量名 = {成员1值,成员2..} 
定义位域结构体时顺便创建变量

(3)位域的使用

在这里插入图片描述

五、共用体(union)

1. 共用体概述

(1)共用体的应用场景

在这里插入图片描述

(2)共用体概述

在C语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体
共用体在定义、说明和使用形式上与结构体相似。两者在本质上的不同仅在于使用你内存的方式上

(3)共用体的定义和使用

定义:

语法: 
union  共用体名 
{ 
	共用体成员列表 
};

使用:

union  共用体名  变量名 
union  共用体名  变量名 = {成员值} 
定义共用体时顺便创建变量

2. 共用体大小

在这里插入图片描述

3. 枚举概念

(1)枚举的概述

C语言中构造类型之一
在开发中,有些变量只有几种可能的取值,比如:一周有七天、一年有四季、在枚举的定义中,会将变量一一列出来。

(2)枚举的定义和使用

定义:

语法: 
enum  枚举名 
{ 
	枚举成员列表 
};

使用:

enum  枚举名  变量名 
enum  枚举名  变量名 = 枚举常量 
定义枚举时顺便创建变量

在这里插入图片描述

(3)枚举的特点

  1. 默认第一个成员从0开始,后面成员依次+1
  2. 有特定值的成员后面,从特定值开始依次+1
  3. 同一个枚举类型中,成员值可以相同
  4. 不同的枚举类型中,成员名不可以一样

4. typedef关键字

(1)typedef关键的作用

  1. typedef是在计算机编程语言中用来为复杂的声明定义简单的别名
  2. 可以是内部数据类型也可以是自定义数据类型

(2)typedef关键字的意义

  1. 给变量一个易记且意义明确的新名字
  2. 简化一些比较复杂的类型声明。

(3)typedef关键字的使用

基本语法: 
	typedef   <已有数据类型>   <新数据类型>; 
		
	如: typedef   int  INTEGER; 

这里新定义了数据类型INTEGER, 其等价于int 
	
	INTEGER  i;    <==>  int   i;


简单的新名字: 
	typedef unsigned char u_int8;        	 //8位无符号数
	typedef unsigned short int u_int16; 	//16位无符号数 
	typedef unsigned int u_int32;          //32位无符号数 
化繁为简: 
	typedef   struct  _node_ 
	{ 
	int  data; 
	struct _node_  *next; 
	} listnode, *linklist;

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值