linux学习:结构体、联合体、枚举

目录

结构体

例子

大小

联合体

例子

大小

枚举

例子

大小


结构体

结构体就是我们自己发明的数据类型,因此使用结构体至少包含两个步骤: 第一,创建一个自定义的结构体类型。 第二,用这个自己搞出来的类型定义结构体变量

// 1,创建一个结构体模板 student,包含姓名、年龄和分数
struct student
{
char name[32];
int age;
float score;
};
// 2,使用 student 模板定义两个结构体变量
struct student Jack, Rose;

例子

1 #include <stdio.h>
2 #include <string.h>
3
4 struct student // 结构体模板
5 {
6     char name[32];
7     int age;
8     float score;
9 };
10
11 void show(struct student someone);
12
13 int main(void)
14 {
15     // 定义一个 student 类型结构体变量 Jack,并将成员赋值
16     struct student Jack;
17     strcpy(Jack.name, "Jack"); // 圆点.被称为成员引用符
18     Jack.age = 18;
19     Jack.score = 90.5;
20
21     // 定义一个 student 类型结构体变量 Rose,并进行初始化
22     struct student Rose = {"Rose", 16, 80.0};
23
24     // 对结构体变量 Michael 进行指定成员初始化
25     struct student Michael = {
26         .score = 88.5, 
27         .name = "Michael" 
28     };
29
30     // 定义结构体 Michael_Junior 并直接将 Michael 整个赋值给他
31     struct student Michael_Junior;
32     Michael_Junior = Michael;
33
34     // 定义一个具有 50 个 student 类型结构体变量的数组
35     struct student myclass[50];
36     myclass[0] = Jack;
37     myclass[1] = Rose;
38     myclass[2] = Michael;
39
40     // 定义一个结构体指针 p,并使其指向结构体 Michael
41     struct student *p;
42     p = &Michael;
43
44     // 对结构体指针使用跟普通指针一样,但也可以使用更加方便的箭头
45     (*p).age = 23;
46     p -> age = 23;
47
48     show(&Michael); // 将结构体的地址作为参数传递给函数 show( )
49     return 0;
50 }
51
52 void show(struct student *ptr_someone)
53 {
54     printf("name: %s, age: %d, score: %f\n", 
55         ptr_someone -> name, // 将结构体的成员打印出来
56         ptr_someone -> age, 
57         ptr_someone -> score);
58 }

大小

结构体大小要遵循地址对齐

每一款不同的处理器,存取内存数据都会有不同的策略,如果是 32 位的 CPU,一般 来讲他在存取内存数据的时候,每次至少存取 4 个字节(即 32 位),也就是按 4 字节对齐 来存取的。换个角度讲:CPU 有这个能力,他能一次存取 4 个字节。 接下来我们可以想到,为了更高效地读取数据,编译器会尽可能地将变量塞进一个 4 字节单元里面,因为这样最省时间。如果变量比较大,4 个字节放不下,则编译器会尽可能 地将变量塞进两个 4 字节单元里面,反正一句话:两个坑能装得下的就绝不用三个坑。这 就是为什么变量的地址要对齐的最根本原因。

可见,如果对一个 double 型数据的地址不作要求,那么 CPU 就有可能为此付出代价: 需要三个指令周期才能将区区 8 个字节搬到家里来,这显然很不环保,环保的做法是:令 其地址至少是 4 的整数倍(即 4字节对齐)

可以总结出一套这样的规律(假设是 32 位系统):

  • 1,如果变量的尺寸小于 4 字节,那么该变量的 m 值等于变量的长度。
  • 2,如果变量的尺寸大于等于 4 字节,则一律按 4 字节对齐。
  • 3,如果变量的 m 值被人为调整过,则以调整后的 m 值为

一个变量的 m 值规定了这个变量的地址的最小倍数,同时也规定了这个变 量的大小至少是这个 m 值的倍数。m 值不是这个变量的大小。结构体本身也是一个变量, 结构体变量的 m 值取决于其成员中 m 值最大的那个

struct node { short a; double b; char c; }x;

short为2,double为4,char为1,取最大的4为m,所以该x的大小为12

联合体

例子

union example
{
int a;
char b;
double c;
}x;

大小

共用体变量 x 的大小等于各成员中的最大值,也就是 c 的大小:8 个字节

枚举

enum spectrum {red, green, blue};
相当于
enum spectrum {red=0, green=1, blue=2};

例子

1 #include <stdio.h>
2
3 // 定义了一个枚举常量列表
4 enum spectrum {red, green, blue};
5
6 int main(void)
7 {
8     enum spectrum color; // 定义了一个枚举变量
9     color = green;
10
11     switch(color)
12     {
13     case red: // 使用枚举常量来判断 color 的值
14         printf("red\n");
15         break;
16     case green:
17         printf("green\n");
18         break;
19     case blue:
20         printf("blue\n");
21         break;
22     default:
23         printf("unknown color\n");
24     }
25
26     return 0;
27 }

大小

一般为int型,就为4个字节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何激怒一位Python爱好者?

写代码不那么pythonic风格的&#xff0c;多多少少都会让人有点难受。 什么是pythonic呢&#xff1f;简而言之&#xff0c;这是一种写代码时遵守的规范&#xff0c;主打简洁、清晰、可读性高&#xff0c;符合PEP 8&#xff08;Python代码样式指南&#xff09;约定的模式。 Pyt…

基于SSM+Jsp+Mysql的宜佰丰超市进销存管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

Python实现对一个IP地址和端口号列表进行nmap扫描

一.功能目的 使用python实现对一个IP地址和端口号列表进行nmap扫描 二.功能调研 根据查找得知我们需要用到python的subprocess库 1.代码示例 以下是搜到的简单的subprocess库代码 import subprocess result subprocess.run([ls, -l], capture_outputTrue, textTrue) …

机器视觉系统-什么是光通量

光通量(uminous flux)指人眼所能感觉到的辐射功率&#xff0c;它等于单位时间内某一波段的辐射能量和该波段的相对视见率的乘 积。由于人眼&#xff08;传感器】对不问波长光的相对视见率不同&#xff0c;所以不同波长光的辐射功率相等时&#xff0c;其光通量并不相等。 光通量…

动态规划专练( 343.整数拆分)

343.整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10 输出: 36 …

【目标检测】计算YOLOv5/7/8/9的TP, FP, FN, Recall和Precision

1. 设定IoU和Conf阈值 2. 保存推理结果的txt文件 3. 计算TP, FP, FN import osclasses {0: "class 1",1: "class 2"}def iou(box1, box2):box1_x1 box1[0] - box1[2] / 2box1_y1 box1[1] - box1[3] / 2box1_x2 box1[0] box1[2] / 2box1_y2 box1[1…

从零学算法274

274.H 指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#x…

Web程序设计-实验01 HTML与CSS基础

【实验主题】 影视详情页设计 【实验任务】 1、浏览并分析多个影视详情页面&#xff08;详见参考资源&#xff0c;建议自行搜索更多影视网站&#xff09;的主要元素构成和版面设计&#xff0c;借鉴并构思预期效果。 2、新建 index.html文件&#xff0c;合理运用HTML标记编写…

计算机网络——MAC地址和IP地址

目录 前言 引入 MAC地址与IP地址 IP地址和MAC地址是什么&#xff1f;如何起作用的&#xff1f; MAC地址如何表示与确定网卡在网络中的确定位置&#xff1f; DHCP协议自动帮我们配置 操作系统是如何知道对方的MAC地址的&#xff1f; 前言 本博客是博主用于复习计算机网络…

【回溯】Leetcode 17. 电话号码的字母组合【中等】

电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 **输入&#xff1a;**digits “23” 输出&am…

uniapp登录拦截白名单使用

1、创建uni.promisify.adaptor.js文件 // 根目录新建 uni.promisify.adaptor.js // 路由白名单 const list [/, /pages/stroke/stroke]; //创建路由拦截&#xff0c;这里只判断一般跳转 uni.addInterceptor(switchTab, {invoke(res) {console.log(res);//存在token就跳转if (…

LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布

2024年4月8日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.5.0版本。 这一版本的功能升级包括&#xff1a;新增DataEase小助手支持&#xff0c;通过结合智能算法和LLM&#xff08;即Large Language Model&#xff0c;大语言模型&#xff09;能力&#xff0c;DataEas…

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【回溯】2023C-找到它【欧弟算法】全网注释最详细分类最全的华为OD真题题解

有LeetCode算法/华为OD考试扣扣交流群可加 948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1336了解算法冲刺训练 文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出 示例二输入输出 解题思路状态更新和回滚写在横向遍历for循环内的…

M语言前景

M语言作为一种编程语言&#xff0c;其前景可能受到多个因素的影响&#xff0c;包括其应用领域、社区支持、市场需求等。目前&#xff0c;M语言在多个领域都有应用&#xff0c;如智能机器人开发、语音识别系统、图像处理技术、大数据分析、云计算等&#xff0c;这显示出其多功能…

使用Python进行网站爬虫和数据分析

在网络数据的获取和分析过程中&#xff0c;网站爬虫技术是一种常见且有效的手段。本文将介绍如何使用Python编程语言&#xff0c;结合常用的爬虫库和数据分析工具&#xff0c;实现对网站数据的抓取和分析。 1. 准备工作 在开始之前&#xff0c;确保您已经安装了Python解释器&a…

智能加湿器中应用的数字温度传感芯片

随着经济的发展和人民生活水平的提高&#xff0c;人们对生活质量和健康的要求愈来愈高。空气加湿器就是这样慢慢的走进全球的很多家庭当中&#xff0c;成为干燥地区家庭不可缺少的一种小型家电产品。空气加湿器在我国仍属于新兴产物&#xff0c;加大对空气加湿器的研究与开发的…

【how2j练习题】HTML DOM部分阶段练习

练习1 <!-- 验证账号是否已经存在 那么就在js使用简单的验证规则&#xff1a; 如果账号是以a或者A开头的&#xff0c;那么就提示已经存在了。 --> <!-- 1.需要一个输入框和一个按钮 2.按钮上绑上一个事件。 3.编写事件&#xff0c;并输出答案 --><html><…

服务器感染了.rmallox勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 随着网络技术的发展&#xff0c;勒索病毒已经成为当今数字时代的一大威胁。近期出现的.rmallox勒索病毒更是引发了广泛关注。本文将深入探讨.rmallox勒索病毒的特点&#xff0c;并提供一系列应对这一威胁的高效策略。如果受感染的数据确实有恢复的价值与必要…

如何打造高度柔性动态的智能仓储物流解决方案?

近年来&#xff0c;仓储物流行业步入自动化系统集成时代&#xff0c;以货架为存储主体的方式逐步发展成为了自动化储方式&#xff0c;核心设备也由货架转变为机器人货架&#xff0c;形成系统集成物流存储体系。河北沃克根据客户需求精准发力&#xff0c;推出了新一代海格里斯智…

TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用

TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常见的…