当前位置: 首页 > news >正文

学习笔记——C语言基本概念结构体共用体枚举——(10)

1、结构体

定义新的数据类型:

数据类型:char short int long float double
数组 指针 结构体

结构体: 新的自己定义的数据类型
格式:


struct 名字{
        成员 1;
        成员 2;
        。 。 。
        成员 n;
        };

举例:

struct Student{char name[32];int ID;float fraction;
};


新的数据类型名: struct 名字

1.2定义方式

1.2.1先定义数据类型,再用数据类型定义变量

第一步: 定义数据类型

struct Stu
{char name[32];int ID;float score;
}; //已经定义好新的数据类型, 叫 struct Stu


        仅仅有数据类型, 不定义变量, 计算机不开辟空间
第二步: 用自己定义的数据类型, 定义变量
                struct Stu per1;
        定义一个变量, 变量名叫 per1, per1 的数据类型 struct Stu 类型; 计算机给 per1 开
辟 sizeof(struct Stu)大小空间。

1.2.2 定义数据类型, 同时用数据类型定义变量

struct Stu
{char name[32];int ID;float score;
}per1; 

        定义一个变量, 变量名叫 per1, per1 的数据类型 struct Stu 类型; 计算机给 per1 开辟
sizeof(struct Stu)大小空间。

1.2.3 无名结构体 ,只能在定义数据类型的同时定义变量

struct
{
char name[32];
int ID;
float score;
}per1;

1.3 结构体取成员

普通变量:格式: 变量名.成员
举例:struct Stu{char name[32];int ID;float score;};struct Stu per1;

取成员:
per1.name         char [32] %s
per1.ID               int %d
per1.score         float %f

指针变量取成员
格式: 指针变量名->成员;
举例:struct Stu{char name[32];int ID;float score;};struct Stu per1; //结构体变量名不是地址struct Stu *p = &per1;p->name char [32] %sp->ID int %dp->score float %f

1.4结构体的初始化

1--> 完全初始化 -- 依次赋值
2--> 部分初始化 -- 依次赋值, 未赋值的系统给 0
3--> 只定义变量, 不赋值, 遵循全局变量和局部变量自身的原则
4--> 取成员初始化
5--> 从键盘输入

1.5求结构体大小

方式 1: 计算机运算: sizeof();//括号中写变量名/结构体数据类型
方式 2: 自己运算
第一步: 确定对齐方式-以下三个中的较小者:
        1》 看系统 64 位 8 字节
        2》 看结构体中最大成员的大小( 数组, 看元素)
        3》 #pragma pack(2/4/8) 括号中写几就是几
第二步: 结构体中除第一个成员外, 其他成员距离首地址的偏移量, 必须是对齐方式
或者自身大小中较小者的整数倍!
第三步: 结构体的整体大小, 必须是对齐方式的整数倍!

举例:

struct Stu
{int id;char ch;long num;
}
//第一步:先确定对齐方式,现在使用的计算机基本上都是64位处理系统,对应的也就是8字节。
然后,看结构体中最大成员的大小(数组,看元素),其中结构体中最大的为long类型,8字节。和系统比较取最小,也就是说对齐方式为:8;
第二步:看结构体中除第一个成员外,其他成员距离首地址的偏移量,必须是对齐方式或者自身大小中较小者的整数倍。
ch举例首地址的偏移量是4字节,满足是自身大小的1的整数倍,不需要填充。
num举例首地址的偏移量是5字节,需要对齐方式8或者自身大小的整数倍,那么ch后面要添加三个位
第三步:结构体整体的大小,必须是对齐方式的整数倍,目前是16,满足

2、共用体

关键字:union

定义:所有的成员公用同一块空间

格式:

        union 名字{
                成员 1;
                成员 2;
                ...
                成员 n;
        };
使用方式: 和结构体基本一致。

大小:
        第一步: 确定对齐方式-以下三个中的较小者:
        1》 看系统 64 位 8 字节
        2》 看共用体中最大成员的大小( 数组, 看数据类型)
        第二步: 最大成员, 满足对齐方式的整数倍!

union Tag
{int a;char buf[5];
};
第一步:操作系统为8位,共用体内最大为int 4位。
确定对齐方式为4
第二步:int 4+char 1=5,必须是对齐方式的整数倍。所以后面要补位加三,整体大小为8

应用:
测试计算机的大小端:
        大端模式:是指数据的高字节保存在内存的低地址中;

        小端模式:是指数据的高字节保存在内存的高地址中;

代码测试:

#include<stdio.h>
union Tag
{unsigned int a;unsigned char buf[4];};
int main()
{/*union Tag text;text.a=1;if(text.buf[0]==1){printf("小端\n");}else if(text.buf[3]==1){printf("大端\n"); }*/unsigned int a=1;unsigned char *p=(unsigned char*)&a;if(*p==1){printf("小端\n");}else if(*(p+3)==1){printf("大端\n"); }return 0;
}

3、枚举

const int num1 = 100;
定义: 整型常量的集合;
关键字: enum
一般使用: enum{a,b,c,d,e,f,g};
a: 整型常量, 是 0
b: 整型常量, 是 1
c: 整型常量, 是 2
。 。 。 。 g, 是 6

特殊用法: enum{a,b,c,d=100,e,f,g};
a: 整型常量, 是 0
b: 整型常量, 是 1
c: 整型常量, 是 2
d: 整型常量, 是 100
e: 整型常量, 是 101
f: 整型常量, 是 102
g: 整型常量, 是 103
枚举大小: 和里面具体的个数无关, 固定 4 字节;

typedef: 给数据类型起一个新的名字
格式:
typedef 原来的数据类型 新的名字;
typedef int A; A 就是 int 的别名
A a; //int a;
typedef struct Stu{
...
}STU; STU: 就是 struct Stu 的别名
STU per; // struct Stu per;
typedef struct{
...
}STU; STU 就是结构体数据类型
STU per; //用结构体定义变量叫 per
 

http://www.lryc.cn/news/331259.html

相关文章:

  • VMware虚拟机三种网络模式
  • Ai音乐大师演示(支持H5、小程序)独立部署源码
  • Windows下Docker搭建Flink集群
  • VGA显示器驱动设计与验证
  • jupyter notebook 配置默认文件路径
  • 强大缓存清理工具 NetShred X for Mac激活版
  • 在ssh 工具 Linux screen会话中使用鼠标进行上下滚动
  • Github2024-04-03 开源项目日报 Top10
  • Linux笔记之制作基于ubuntu20.4的最小OpenGL C++开发docker镜像
  • 企业为什么选择高防服务器?
  • OpenHarmony实战:轻量级系统之配置其他子系统
  • 关于VueCli项目中如何加载调试Worker和SharedWorker
  • Centos7安装单机版Kafka
  • 基于深度学习的钢材表面缺陷检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
  • 计算机网络:数据链路层 - 点对点协议PPP
  • Springboot集成token认证
  • 计算机网络_工具
  • 如何实现一个Java的@注解?
  • 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换
  • 迅饶科技 X2Modbus 网关 GetUser 信息泄露漏洞复现
  • 修改亚马逊云科技账户的密码和MFA
  • 提升性能与精准追踪:SkyWalking自定义跟踪忽略插件
  • 第十三届蓝桥杯大赛软件赛省赛CC++大学B组
  • zookeeper监听集群节点的实现zkclient组件实现方案(Java版)
  • 【ArduinoQuartus】在小脚丫STEP CYC10上安装PulseRain Reindeer并在软核上运行基础功能
  • 【电路笔记】-逻辑与门
  • 蓝桥杯练习——拼出一个未来
  • stm32f103c8t6学习笔记(学习B站up江科大自化协)-SPI
  • 云计算的安全需求
  • 【C++】编程规范之表达式原则