学习笔记——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
相关文章:
学习笔记——C语言基本概念结构体共用体枚举——(10)
1、结构体 定义新的数据类型: 数据类型:char short int long float double 数组 指针 结构体 结构体: 新的自己定义的数据类型 格式: struct 名字{ 成员 1; 成员 2; 。 。 。 …...
VMware虚拟机三种网络模式
VMware虚拟机提供了三种主要的网络连接模式,它们分别是: 桥接模式(Bridged Mode)网络地址转换模式(NAT Mode)仅主机模式(Host-Only Mode) 1. 桥接模式(Bridged Mode&am…...
Ai音乐大师演示(支持H5、小程序)独立部署源码
Ai音乐大师演示(支持H5、小程序)独立部署源码...
Windows下Docker搭建Flink集群
编写docker-compose.yml 参照:https://github.com/docker-flink/examples/blob/master/docker-compose.yml version: "2.1" services:jobmanager:image: flink:1.14.4-scala_2.11expose:- "6123"ports:- "18081:8081"command: jobma…...
VGA显示器驱动设计与验证
1.原理 场同步信号的单位是像素点 场同步信号的单位是一行 60的含义是每秒钟刷新60帧图像 全0表示黑色 2.1 CLK_gen.v module CLK_gen(input wire sys_clk ,input wire sys_rst_n ,output wire CLK_out ,output wire locked );parameter STATE1b0; reg [1:0] cnt; r…...
jupyter notebook 配置默认文件路径
Jupyter是一种基于Web的交互式计算环境,支持多种编程语言,如Python、R、Julia等。使用Jupyter可以在浏览器中编写和运行代码,同时还可以添加Markdown文本、数学公式、图片等多种元素,非常适合于数据分析、机器学习等领域。 安装 …...
强大缓存清理工具 NetShred X for Mac激活版
NetShred X for Mac是一款专为Mac用户设计的强大缓存清理工具,旨在帮助用户轻松管理和优化系统性能。这款软件拥有直观易用的界面,即使是初次使用的用户也能快速上手。 软件下载:NetShred X for Mac激活版下载 NetShred X能够深入扫描Mac系统…...
在ssh 工具 Linux screen会话中使用鼠标进行上下滚动
经过几次发现 除xshell外, WindTerm finalshell MobaXterm 都是进入会话后,发现其界面无法滚动屏幕向上查看 如果想要在Linux screen会话中使用鼠标进行上下滚动。必须首先进入该screen的回滚(scrollback模式)才能进行上下滚动 第一步ÿ…...
Github2024-04-03 开源项目日报 Top10
根据Github Trendings的统计,今日(2024-04-03统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目2Jupyter Notebook项目2C++项目1Shell项目1Go项目1非开发语言项目1Rust项目1从零开始构建你喜爱的技术 创建周期:21…...
Linux笔记之制作基于ubuntu20.4的最小OpenGL C++开发docker镜像
Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像 —— 2024-04-03 夜 code review! 文章目录 Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像1.这里把这本书的例程代码放在了Dockerfile所在的文件夹内以使镜像预装例程代码2.创建Dockerfile3.构建Do…...
企业为什么选择高防服务器?
高防服务器顾名思义就是一种具有高度安全性的服务器,有着很高的防御能力,可以提供更加安全可靠的服务,能够有效地避免分布式拒绝服务攻击和其它的网络安全威胁,以下就是企业选择高防服务器的原因。 高防服务器在硬件安全方面有着很…...
OpenHarmony实战:轻量级系统之配置其他子系统
除上述子系统之外,还有一些必要但是无需进行移植的子系统。如:分布式任务调度子系统、DFX子系统。 这些子系统添加方式比较简单,在“vendor/MyVendorCompany/MyProduct/config.json”文件中进行如下配置即可: {"subsystem&…...
关于VueCli项目中如何加载调试Worker和SharedWorker
安装Webpack插件 VueCli 项目中默认是没有加载 worker 的配置,需要额外安装 webpack 插件来实现,让我们开始安装 worker-loader 插件 # npm npm install worker-loader # pnpm pnpm install worker-loader # yarn yarn add worker-loader配置Webpack插…...
Centos7安装单机版Kafka
下载 链接:https://pan.baidu.com/s/1W8lVEF6Y-xlg6zr3l9QAbg?pwdhbkt 提取码:hbkt 上传到服务器/opt目录 安装 # kafka安装目录为 /opt/kafka cd /opt; mkdir kafka; mv kafka_2.13-2.7.0.tgz ./kafka;cd kafka; #解压 tar -zxvf kafka_2.13-2.7.0…...
基于深度学习的钢材表面缺陷检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
摘要:本文深入研究了基于YOLOv8/v7/v6/v5的钢材表面缺陷检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Strea…...
计算机网络:数据链路层 - 点对点协议PPP
计算机网络:数据链路层 - 点对点协议PPP PPP协议的帧格式透明传输字节填充法零比特填充法 差错检测循环冗余校验 对于点对点链路,PPP协议是目前使用最广泛的数据链路层协议。比如说,当用户想要接入互联网,就需要通过因特网服务提供…...
Springboot集成token认证
一、引出session问题以及token、鉴权 session都是保存在内存中,认证用户增多,服务端开销明显增大。若是认证的记录保存在某台服务器内存中时,意味着用户的下次请求只能够在该服务器内存中进行认证。CSRF跨站攻击 token的鉴权机制࿱…...
计算机网络_工具
从你的电脑到指定ip网站,用时3ms ttl TTL Time To Live 数据包存活时间 指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。每当数据包经过一个路由器时,其存活次数就会被减一 256 - 249 7&…...
如何实现一个Java的@注解?
先看一段代码: ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(value Exception.class)public ResponseEntity defaultErrorHandler(Exception e) {// 将错误信息转成字符串String errorMessage ExceptionUtils.getStackTrace(e);// 创…...
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换
系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
