C语言基础 结构体 枚举

结构体基本概念

构造类型 : 由已有的数据数据类型构成类型

         1.数组 : 多个同种数据类型的数据构成的那么一种类型

            特点 : 只能存放一种数据类型

         2.结构体 : 用来存放表示某种特定含义的一组数据

                   它是对数据的封装

                   函数对功能的封装

         好处 : 提高代码的可读性

                   提高数据的易用性

                   提高代码的可维护性 

 

         定义结构体 :

                  1 . 定义结构类型

                  2 .通过结构体类型定义结构变量

                           strcut 结构类型名称 结构体变量名称;

 

         定义一个结构体类型

         struct Person {

                  int age;

                  char sex;

                  double height;

                  double weight;

                  char *name;

         };

         // 定义结构体变量 

         struct Person person;

         Person.age = 10;

         Person.sex = ‘M';

         Person.weight = 20;

         Person.height = 1.2;

         Person.name = "小明";

 

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

 

结构体初始化 

         // 一 一符值

         Person.age = 10;

         Person.sex = ‘M';

         Person.weight = 20;

         // 整体赋值  要强转

         赋值的时候 , { }中元素的顺序与定义结构体时成员顺序相同

         p1 = (strcut Person) {20,"小明",2.0}

 

         定义结构体变量的同时进行初始化

         struct Person P2 = {15;"小红";1.5};

 

         同种类型的结构体之间可以相互赋值

         p1 = p2;

 

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

结构体类型定义多种方式 :

 

         在函数内部 , 结构类型作用域就如同局部变量一样

         在外边定义的结构体类型像全局变量的作用域

         作用域 : 从定义的那一行开始知道文件的结束

         注意点 : 结构体类型不能声明

         结构体类型的作用域 , 除了不能声明以外, 其他都一样

 

         第一种方式

         1.先定义结构体类型

         2.定义结构变量

         struct Person{

 

                  int age;

                  double height;

         } ;

         struct Person p1;

 

         第二种 定义结构体类型的同时定义结构变量

         struct Person{

 

         int age;

         double height;

         } p1,   p2 = { 20,1.7 };

         int num,num1,num2;

         p1 = (struct Person){10,1.2};

         printf("age =%d,height=%.2lf\n",p1.age,p1.geight);

 

         第三种  定义匿名的结构类型的同时定义结构体变量

         struct Person{

 

                  int age;

                  char sex;

         } p1 , p2;

         p1.age = 10;

         p1.sex = 'W';

         printf("age = %d,sex = %c\n",p1.age,p1.sex);

 

         //  p1 = (struct) {10,'W’};

         1.不支持整体赋值

         2.结构体类型不能重复使用

 

         struct Person{

 

         int age;

         char sex;

         } p1 , p2 = {10,'W'};

;

 

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

细节 

         1 .结构体变量的地址就是第一个成员的地址

         2 .结构体类型本身是不占用存储空间的 , 就如同int 是不占用存储空间的一样

         3 .对于相同数据类型的结构体所占用的存储空间为所有成员之和

 

         struct Data{

                  int year;

                  int month;

                  int day;

         };

         struct Date date;

         printf("%p\n",&date);

         printf("%p\n",&date.year);

 

 

         // 为了快速访问数据 , 结构体内部有一个补齐算法, 默认情况下他一定是占用存储空间最大的成员倍数

         1 . 默认情况一组占用多少个字节取决于最大成员所占用的存储空间

         2 . 

 

         //指定一组占多少字节

         #pragma pack(1)

 

         struct Person{

                  int age;

                  char sex;

         }

         size_t size = sizeof(struct Date);

         printf("%lu\n”,size);



枚举

         枚举: 一个一个列举出来

         作用: 消除魔法数字

         使用场景: 当某个东西只有几个取值的时候就用枚举

         定义枚举格式

 

         enum 枚举类型名称 {

                  元素 ,//逗号

                  ….

         };

 

         注意点:

         1.枚举类型定义中 , 所有元素都是整形常量

         2.枚举类型的本质就是整形

 

         //定义枚举类型

         enum Sex{

                  Man,

                  Woman,

                  Othwe

         };

 

// 可以定义枚举中每一个元素值

enum Season{

         Spring = 1,

         Summer,

         Autumn = 5,

         Winter

};

 

int Man = 10; //枚举定以之后 , 后面不可定义与成员相同变量

 

         int main(){

                  enum Sex sex;

                  sex = Man;

                  Man = 10;  //这里不能把数字赋值给一个枚举类型的变量, 这样枚举存在的意义就没有了

         }

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值