学习笔记——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(…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
