结构体(2)-day16

本文详细介绍了C语言中结构体的对齐规则,包括平台相关性、成员变量对齐以及共用体的特性如初始化、数据转换等。还探讨了枚举类型和链表数据结构,包括其优缺点及在计算机中的实现方式,特别提到了空链表的概念。
摘要由CSDN通过智能技术生成

1,

结构体的对齐规则:
1.在32位的平台上,默认都是按4字节对齐的。         64位的平台 默认是8字节
2.对于成员变量,
   各自在自己的自然边界上对齐。
整个结构体的对齐 
3.如果 成员变量中有比4字节大。  
  此时 整个结构体按照4字节对齐。  //32位的平台
4.如果 成员变量中没有有比4字节大。
  此时 整个结构体按照最大的那个成员对齐。

注意:
1.结构体类型,可以定义在 函数里面,但是此时作用域就被限定在改函数中
2.结构体的定义的形式:
形式1 先定义类型,后定义变量 
struct stu
{
...
};

struct stu s;


形式2 定义类型的同时定义变量
struct stu
{
...
}s1,s2,*s3,s4[10];

struct stu s;
 
形式3 省略了类型名 --如果只用一次,可以这样写

struct 
{
...
}s1,s2,*s3,s4[10];

2,

自然边界对齐 
int -- 4字节 --- 能被4整除的地址编号上 
short -- 2字节 --- 能被2整除的地址编号上 
char -- 1字节 --- 能被1整除的地址编号上

结构体整体对齐
一般是以结构体 

3,共用体

union 共用体名
{
  成员列表; //各个变量 
}; //表示定义一个共用体类型 


注意:
1)共用体 
  初始化 --- 只能给一个值,默认是给到第一个成员变量的

2)共用体成员变量辅助 
  共用体用的数据最终存储的 --- 应该是最后一次给到的值。
  但是只能影响到 自己数据类型对应的空间中的数据

3)可以判断大小端 

4)实际用途 
  a.节省空间 
  b.进行数据转换 
  192.168.1.169 //ip本质是个 32位的数值 

5)共用体的大小  --是成员变量中最大的那个成员的大小

6)共用体类型可以是函数参数,也可以是函数返回值类型 
  
    共用体,结构体类型定义出来之后,
    a.定义变量
    b.定义数组
    c.定义指针 
    d.做函数参数,返回值类型 

eg

 struct teacher
  {
    char name[20];
    int Tno;
    float salary; 
  }

4,

枚举:一枚一枚列举   逐个列举 
如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

声明枚举类型用enum 开头。例如:
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
};

注意:
1.枚举  提高了代码可读性 
2.枚举 本质上是int类型 
  枚举 与 整型 类型兼容 
3.不足
  因为枚举类型 --- 本质上是个整型类型,
  所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中  
4.枚举类型 
  可以做函数 形参 和 返回值 
  定义数组也可以,本质上就是整型数据

5,

链表
数据结构:数据的组织形式 (逻辑上理解的形式)

数组:
int a[10] = {1,2,3,4,5,6,7,8,9,10}; //连续性,有序性,单一性 数据组织形式 ---会决定使用数据的算法 

数组: //顺序表 
   优点:随机访问 方便 
   缺点:
     增加数据 不方便 
     删除数据 不方便

链表:  链式的数据表

优点:
    增加 删除数据很方便 
 缺点:
    找数据不大方便 

计算机中:
   计算机如何体现链式数据结构
   
   [数据1]
   
   [数据2]
   
   
   存放链式数据的结构:
   节点 
   [数据|另外一个节点指针] 
   
[数据1|指针] //节点 
[数据2|指针]
[数据3|指针]


[数据域|指针域]

eg

学生信息

节点:
struct Node
{
//数据域 
  struct stu s;
//指针域
  struct Node *p; //指针类型 
}; 

6,

空链表:
 特点:
  只有头节点
  并且头节点的指针域 为NULL (相当于是尾节点)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值