c语言复习之结构体、联合、枚举(十二)

简介: c语言复习之结构体、联合、枚举(十二)

目录

1.概念定义

1.概念

2.定义

2.变量的初始化与访问

1.初始化

2.访问

3.结构体嵌套

4.面向对象

5.结构体数组

6.结构体字节对齐

1.优点

2.规则

7.位段

1.概念

2.定义

3.位段各部分解释

1.位段名

2.整数类型

3.位段大小

4.注

8.联合

9.枚举

1.概念

2.定义

1.概念定义

1.概念

把同一个对象的不同属性,包装在一起,形成一个结构

2.定义

typedef struct student

{

   unsiged long long stuno;

   char name[20];

   char age;

} student;

2.变量的初始化与访问

1.初始化

student maya={0};//全部初始化为0

maya={.name="dsaf",.age=15,.stuno=2316465456};

2.访问

  1. 普通变量用**.**访问
  2. 指针变量用**->**访问

3.结构体嵌套

//定义一个人的结构,包含姓名,电话,出生日期(年月日)

typedef struct Data

{

   short year;

   short month;

   short day;

}Data;

typedef struct

{

   char name[20];

   unsigned long long tel;

   Data birth;

}person;

//初始化

person maya={"zhangsan",177465489,{1990,5,04}};//年月日外面最好加上花括号

//也可以直接把第一个结构体放入第二个中,去掉typedef

4.面向对象

是一种思想,不是什么语言独有的

  1. 封装:结构体封装
  2. 继承:结构体嵌套
  3. 多态:结构体+指针

5.结构体数组

typedef struct student

{

   int number;

   char name[20];

   char gender[3];

}student;

student stus[49];

6.结构体字节对齐

1.优点

  1. 提高存取数据的速度
  2. 访问特定类型变量要在特定地访问

2.规则

  1. 结构体的大小必须是最宽的基本数据成员的整数倍
  2. 结构体每个成员相当于结构体的首地址的偏移量都是成员大小的整数倍,如果需要,编译器会在成员之间加上填充字节

7.位段

1.概念

在结构体中以位为单位来指定其他成员所占内存长度,这种以位为单位的成员称为位段,利用位段能够用较少的位数存储数据

2.定义

struct Data

{

   整数类型 位段名:位段大小;

   unsigned int year:12;

   unsigned int month:4;

   unsigned int day:5;

}birth;

3.位段各部分解释

1.位段名

即有效的标识符


2.整数类型

c语言标准规定,只有有限的几种数据类型可以用于位段——> 所有的整数类型以及char类型和bool类型


3.位段大小

此位段所占得位数不能超过类型的最大位数


4.注

不能对位段取地址

内存排布:先定义的放到高地址,后定义的放到低地址

8.联合

联合成员共享同一个内存位置,联合中所有成员都是从相同的内存地址开始,但是同一时刻只能有一个成员允许含有一个值,小端模式存储


把struct换成union


9.枚举

1.概念

定义符号常量,用一些符号来表示常量,有些变量的取值范围是有限的—–》星期7天,年12月等等

2.定义

enum arr

{

   space;//自动初始化为0,kill为1

   kill;

}

//可以赋值spcace=56,则kill为57

枚举可以赋值给整型变量,反过来也可以

int a=kill;

————————————————

版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_72157449/article/details/128389987

相关文章
|
15天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
83 14
|
19天前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
80 10
|
23天前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
29天前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
101 13
|
29天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
57 11
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
51 4
|
2月前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
72 10
|
2月前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
2月前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
2月前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。