enum, sizeof, typedef
枚举类型enum
- enum 是 C 语言中的一种自定义类型
- enum 值是可以根据需要自定义的整型值
- 第一个定义的 enum 值默认为 0
- 默认情况下的 enum 值在前一个定义值得基础上加 1
- enum 类型的变量只能取定义时得离散值
-
void code() {enum Color{GREEN, // 0RED = 2, // 2BLUE, // 3};enum Color c = GREEN;printf("%d\n", c); }枚举类型的特殊意义
- enum 中定义的值是 C 语言中真正意义上的常量
- 在工程中 enum 多用于定义整形常量或离散的整型常量
void code()
{enum // 无名枚举,用于定义常量{ARRAY_SIZE = 10, // 定义数组大小};int array[ARRAY_SIZE] = {0};int i = 0;for(i=0; i< ARRAY_SIZE; i++){array[i] = i + 1;}
}
实例分析 : enum 的使用
#include <stdio.h>enum
{ARRAY_SIZE = 10, // 定义常量
};enum Color
{RED = 0x00FF0000, // 定义整形离散值GREEN = 0x0000FF00,BLUE = 0x000000FF
};void PrintColor(enum Color c)
{switch( c ) // 用于 switch case{case RED: printf("Color: RED (0x%08x)\n", c);break;case GREEN:printf("Color: GREEN (0x%08x)\n", c);break;case BLUE:printf("Color: BLUE (0x%08x)\n", c);break;default:break;}
}void InitArray(int array[])
{int i = 0;for(i=0; i<ARRAY_SIZE; i++){array[i] = i + 1;}
}void PrintArray(int array[])
{int i = 0;for(i=0; i<ARRAY_SIZE; i++){printf("%d\n", array[i]);}
}int main()
{enum Color c = GREEN;int array[ARRAY_SIZE] = {0}; // 用于定义数组PrintColor(c);InitArray(array);PrintArray(array);
}
输出:
输出:
Color: GREEN (0x0000ff00)
1
2
3
4
5
6
7
8
9
10
sizeof 关键字
- sizeof 是编译器的内置指示符
- sizeof 用于计算类型或变量所占的内存大小
-
sizeof 的值在编译期就以确定
- sizeof 用于类型 : sizeof(type)
- sizeof 用于变量 : sizeof(var) 或 sizeof var
void code()
{int var = 0;printf("%d\n", sizeof(int));printf("%d\n", sizeof(var));printf("%d\n", sizeof var);
}
实例:
#include <stdio.h>double f()
{printf("D.T.Software\n");return 0.0;
}int main()
{int var = 0;int size = sizeof(var++);printf("var = %d, size = %d\n", var, size);size = sizeof(f());printf("size = %d\n", size);
}
输出:
输出:
var = 0, size = 4
size = 8分析: 注意 var = 0 ; sizeof(f()) = 8
sizeof 不是函数,不会在运行时计算变量或类型的值,而是在编译时,所有的 sizeof 都被具体的值替换。
sizeof(var++) 在编译时直接被替换,var++ 得不到执行。
typedef
- typedef 用于给一个已经存在的数据类型重命名
- typedef 本质上不能产生新的类型
-
typedef 重命名的类型:
- 可以在 typedef 语句之后定义
- 不能被 unsigned 和 signed 修饰
实例:
#include <stdio.h>
// --- 定义方式 1
typedef int Int32;// --- 定义方式 2
struct _tag_point
{int x;int y;
};
typedef struct _tag_point Point;// --- 定义方式 3
typedef struct
{int lengyh;int array[];
}SoftArray;// --- 定义方式 14
// 编译器没有要求被重命名的类型必须先定义在可以
typedef struct _tag_list_node ListNode;
struct _tag_list_node
{ListNode* next;
};int main()
{Int32 i = -100; // int// unsigned Int32 ii = 0; // ErrorPoint p; // struct _tag_pointSoftArray* sa = NULL;ListNode* node = NULL; // struct _tag_list_node
}
小结
- enum 用于定义离散值类型
- enum 定义的值是真正意义上的常量
- sizeof 是编译器的内置指示符
- sizeof 不参与程序的执行过程
typedef 用于给类型重命名
- 重命名的类型可以在 typedef 语句之后
相关文章:
enum, sizeof, typedef
枚举类型enum enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自定义的整型值第一个定义的 enum 值默认为 0默认情况下的 enum 值在前一个定义值得基础上加 1enum 类型的变量只能取定义时得离散值 void code() {enum Color{GREEN, // 0RED 2, // 2BLUE, …...
(二)激光线扫描-相机标定
1. 何为相机标定? 当相机拍摄照片时,我们看到的图像通常与我们实际看到的不完全相同。这是由相机镜头引起的,而且发生的频率比我们想象的要高。 这种图像的改变就是我们所说的畸变。一般来说,畸变是指直线在图像中出现弯曲或弯曲。 这种畸变我们可以通过相机标定来进行解…...
pytorch 数据载入
在PyTorch中,数据载入是训练深度学习模型的重要一环。 本文将介绍三种常用的数据载入方式:Dataset、DataLoader、以及自定义的数据加载器。 使用 Dataset 载入数据 方法: from torch.utils.data import Datasetclass CustomDataset(Dataset…...
angular 在vscode 下的hello world
Angulai 是google 公司开发的前端开发框架。Angular 使用 typescript 作为编程语言。typescript 是Javascript 的一个超集,提升了某些功能。本文介绍运行我的第一个angular 程序。 前面部分参考: Angular TypeScript Tutorial in Visual Studio Code 一…...
Django、Nginx、uWSGI详解及配置示例
一、Django、Nginx、uWSGI的概念、联系与区别 Django、Nginx 和 uWSGI 都是用于构建和运行 Web 应用程序的软件,这三个软件的概念如下: Django:Django 是一个基于 Python 的开源 Web 框架,它提供了一套完整的工具和组件…...
王道考研计算机组成原理——计算机硬件的基础知识
计算机组成原理的基本概念 计算机硬件的针脚都是用来传递信息,传递数据用的: 服务程序包含一些调试程序: 计算机硬件的基本组成 控制器通过电信号来协调其他部件的工作,同时负责解析存储器里存放的程序指令,然后指挥…...
[晕事]今天做了件晕事21;设置代理访问网站的时候需注意的问题
今天在家上班,设置好VPN,通过代理来访问公司内部的一个系统浏览器的反应如下: Hmmm… can’t reach this page ***.com refused to connect. 这个返回的错误,非常的具有迷惑性,提示的意思:拒绝链接…...
Go通过reflect.Value修改值
到目前为止,反射还只是程序中变量的另一种读取方式。然而,在本节中我们将重点讨论如何通过反射机制来修改变量。 回想一下,Go语言中类似x、x.f[1]和*p形式的表达式都可以表示变量,但是其它如x 1和f(2)则不是变量。一个变量就是一…...
【MySql】4- 实践篇(二)
文章目录 1. SQL 语句为什么变“慢”了1.1 什么情况会引发数据库的 flush 过程呢?1.2 四种情况性能分析1.3 InnoDB 刷脏页的控制策略 2. 数据库表的空间回收2.1 innodb_file_per_table参数2.2 数据删除流程2.3 重建表2.4 Online 和 inplace 3. count(*) 语句怎样实现…...
获取多个接口的数据并进行处理,使用Promise.all来等待所有接口请求完成
Promise.all (等待机制) 方法 它调用了多个函数,这些函数返回了Promise对象,每个Promise对象代表了一个异步操作。 然后,使用Promise.all将这多个Promise对象包装成一个新的Promise对象,它会等待所有的Promise都完成(或…...
利用C++开发一个迷你的英文单词录入和测试小程序-升级版本
我们现在有了一个本地sqlite3的迷你英文单词小测试工具,需求就跟工作当中一样是不断变更的。这里虚构两个场景,并且一步一步的完成最终升级后的小demo。 场景:数据不依赖本地sqlite3,需要支持远程访问,用目前的restfu…...
用c动态数组(实现权重矩阵可视化)实现手撸神经网络230902
变量即内存、指针使用的架构原理: 1、用结构struct记录 网络架构,如 float*** ws 为权重矩阵的指针(指针地址); 2、用 = (float*)malloc (Num * sizeof(float)) 给 具体变量分配内存; 3、用 = (float**)malloc( Num* sizeof(float*) ) 给 指向 具体变量(一维数组)的…...
Android.mk和Android.bp
公司承接Android、iOS等APP开发、前后端网站开发、小程序开发、安全服务等项目! 公司官网:www.bincodesec.com 项目案例 一、编译不同类型的模块 1.编译成Java库 Android.mk include $(BUILD_JAVA_LIBRARY)Android.bp java_library {} 2.编译成Java静态库 And…...
CSS 常用样式-文本属性
一、水平对齐 text-align CSS中的text-align属性用于水平对齐文本。它可以应用于块级元素和表格单元格。 常见的属性值包括: left:左对齐,文本在容器的左侧。right:右对齐,文本在容器的右侧。center:居中…...
BootstrapBlazor企业级组件库:前端开发的革新之路
作为一名Web开发人员,开发前端我们一般都是使用JavaScript,而Blazor就是微软推出的基于.Net平台交互式客户Web UI 框架,可以使用C#替代JavaScript,减少我们的技术栈、降低学习前端的成本。 而采用Blazor开发,少不了需…...
力扣 -- 1745. 分割回文串 IV
解题步骤: 参考代码: class Solution { public:bool checkPartitioning(string s) {int ns.size();vector<vector<bool>> dp(n,vector<bool>(n));for(int in-1;i>0;i--){for(int ji;j<n;j){if(s[i]s[j]){dp[i][j]i1<j?dp[i…...
C# 给某个方法设定执行超时时间
C# 给某个方法设定执行超时时间在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死。 在这时、我们可以通过Thread、Thread Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是…...
安装NodeJS并使用yarn下载前端依赖
文章目录 1、安装NodeJS1.1 下载NodeJS安装包1.2 解压并配置NodeJS1.3 验证是否安装成功2、使用yarn下载前端依赖2.1 安装yarn2.2 使用yarn下载前端依赖参考目标:在Windows下安装新版NodeJS,并使用yarn下载前端依赖,实现运行前端项目。 1、安装NodeJS 1.1 下载NodeJS安装包…...
(Java高级教程)第三章Java网络编程-第八节:博客系统搭建(前后端分离)
文章目录 一:前端页面回顾二:博客功能展示三:数据库表设计(1)表设计(2)封装DataSource 四:实体类和数据访问对象(1)实体类(2)数据访问…...
901. 股票价格跨度
设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。 例如,如果未来 7 天股票的价格是 [100,…...
Qt WebEngine实战避坑:证书管理、代理设置与高DPI适配那些事儿
Qt WebEngine实战避坑指南:证书管理、代理配置与高DPI适配深度解析 在跨平台桌面应用开发领域,Qt WebEngine作为Chromium引擎的封装实现,为开发者提供了强大的Web内容嵌入能力。然而在实际项目落地过程中,开发者常会遇到三类典型问…...
先进制程EPE挑战:从系统误差到量测革命,如何驯服边缘位置误差
1. 从“理所当然”到“如履薄冰”:边缘位置误差如何成为先进制程的“隐形杀手”在半导体行业过去的黄金岁月里,工程师们有一个近乎奢侈的“共识”:芯片内部那些由光刻、刻蚀定义的特征边缘,可以被理所当然地看作是笔直且在不同工艺…...
Cursor Pro破解终极指南:开源工具cursor-free-vip实现AI编程助手永久免费使用
Cursor Pro破解终极指南:开源工具cursor-free-vip实现AI编程助手永久免费使用 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: …...
终极开源解决方案:用Video-subtitle-extractor高效提取视频硬字幕的完整指南
终极开源解决方案:用Video-subtitle-extractor高效提取视频硬字幕的完整指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含…...
NotebookLM笔记整理实战指南:5步打造自动关联知识图谱的智能笔记系统
更多请点击: https://intelliparadigm.com 第一章:NotebookLM笔记整理实战指南:5步打造自动关联知识图谱的智能笔记系统 NotebookLM 是 Google 推出的面向研究者与开发者的第一方 AI 笔记工具,其核心能力在于基于用户上传文档构建…...
Docker容器化高可用架构部署方案(二)
01-环境准备 本文档详细介绍部署前的环境准备工作,包括操作系统要求、Docker安装、内核参数配置和网络确认。 系统要求 硬件要求 CPU:至少2核心 内存:至少4GB 磁盘:至少40GB可用空间 操作系统 OpenEuler 24.03 SP3 或其他L…...
AgentDock:构建可控AI智能体的开源框架与工程实践
1. 项目概述:构建可控的智能体应用框架如果你正在寻找一个既能利用大语言模型(LLM)的创造力,又能确保关键业务流程稳定可靠的开发框架,那么 AgentDock 的出现可能正合你意。我最近深度体验了这个开源项目,它…...
AI写专著的技巧与工具:一键生成20万字专著,开启写作新体验!
学术著作的严谨性离不开丰富的资料和数据支撑,但资料的搜集和数据的整合恰恰是撰写过程中最繁琐且耗时的环节。进行研究的学者需要全面搜索国内外的最新文献,确保所选文献既权威又相关,并追溯到原始来源,避免出现二次引用的错误&a…...
在Serv00共享主机上部署SOCKS5代理:原理、部署与优化指南
1. 项目概述与核心价值最近在折腾一些需要稳定网络连接的自托管服务时,遇到了一个经典难题:如何在资源受限的共享主机环境里,搭建一个轻量、稳定且可控的网络代理通道。这让我想起了之前在社区里看到的一个项目——cmliu/socks5-for-serv00。…...
树莓派+Ollama分离部署OpenClaw:打造家庭局域网AI助手
1. 项目概述:在树莓派上部署OpenClaw,实现本地网络AI助手最近在折腾我的家庭实验室,想把AI助手的能力从主力电脑上解放出来,让它变成一个常驻在角落里的独立服务。我的主力机性能不错,跑大语言模型没问题,但…...
