学习笔记——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(…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
