数据结构和变量常量
前言c语言中的数据类型是什么为什么需要数据类型我们用c语言编写程序是为了解决日常生活中的问题而为了描述这些问题就需要相应的“量”比如我在网购时某个商品的价格、销售量、产品名称等数据都需要一个“量”来存储到内存中“量”与“量”之间是有区别的就如上例子价格是小数销售量是整数产品名称是字符它们都是不同类型的数据整数要用整型的数据类型来描述量小数要用浮点型的数据类型来描述量字符要用字符型的数据类型来描述量。所以数据结构就是用来修饰“量”这个量就是c语言中的变量和某些常量的修饰符是专门用来批量、整齐管理一堆数据的工具修饰后编译器就知道了这个“量”应该这么放到内存中其实就是这个“量“放到内存中的哪个位置给这 个“量”分配多大的内存。1.基本的的数据类型1.1字符型//字符数据类型--char char cha;//创建char型变量ch并初始化为字符a在c语言中字符要用单引号引起来如x,a,b等它们的数据类型都是字符型char。2.2整型//整型类型--int int num; int score;2.3浮点型float //单精度浮点型 double //双精度浮点型 float pi3.14; //此时系统默认3.14是double类型 float pi3.14f; //只有在3.14后加上f标记3.14才是float类型 double d5.22;2.4布尔类型在c80/c89时期并没有为布尔值专门设立一个类型使用整数0表示假用非0表示真。在c99标准中专门引入了布尔类型表示真假,布尔类型的取值为false或true_Bool //c99标准中的布尔类型写法 //_Bool就相当于intfloat等数据类型是关键字 _Bool flagtrue;如果想要使用bool来表示布尔类型就需要包含头文件#includestdbool.h因为bool就是定义在头文件stdbool中的宏#define bool _Bool #define false 0 #define true 1代码演示:#includestdio.h #includestdbool.h int main() { bool flagtrue;//如果不加stdbool头文件可以用_Bool来创建布尔类型的变量 if(flag) { printf(I like C); } return 0; }在c23标准中正式把boolfalsetrue定义为关键字再此标准中用bool来创建布尔类型可以不用包含头文件stdbool了。2.类型修饰符2.1short和longshort和long修饰数据类型后改变了数据类型所申请的内存长度。补充:内存的最小单位是比特bit1 bit1个二进制位二进制位上只能存放0或18个bit是一个字节也就是一个字节有8个二进制位一个字节可以存放的最大数是11111111二进制255十进制内存长度越长所能表示的数越大。short [int] //短整型 int //整型 long [int] //长整型 long long [int] //长长整型 //[]中的内容可以省略 //修饰浮点型 long double //c99引入如果我们想要知道某一类型变量在内存中所申请的字节数可以使用操作数sizeofsizeof(type) //type是数据类型//示例 printf(%zu,sizeof(int)); printf(%zu,sizeof(double));sizeof的返回值(就是变量在内存中占几个字节)类型是size_t在printf中输出需要占位符%zu。数据类型长度关系//整型家族 1sizeof(char)sizeof(short)sizeof(int)sizeof(long)sizeof(long long) //浮点型家族 sizeof(float)sizeof(double)sizeof(long double)2.2signed和unsignedsigned和unsigned专门用来修饰整型和字符型。它们用来改变数据类型所声明的变量所能表示的数的范围的。用signed修饰的变量可以表示正数负数和0用unsigned修饰的变量只能用来表示正数和0整型的数据类型就等同于使用了signed修饰只不过整型的signed一般忽略不写如int等同于unsigned int对于字符型char不等同于signed charchar可能是unsigned char也可能是signed char具体等价于哪个是编译器的具体实现定义的。于同一整型变量而言用unsigned修饰后的数据类型所能表达的最大整数的范围扩近似大了没有修饰的一倍在c语言中可以使用sizeof操作符来计算出各个数据类型和变量在内存中所占的字节数sizeof返回值是无符号整数但是c语言中并没有明确规定到底是那种无符号整数可能是unsigned int亦可能是unsigned long甚至是unsigned long long具体是由电脑自身系统决定的这就不利于程序的移植性。为解决这一问题c语言中专门为sizeof制定了一个无符号整数类型size_t用来统一表示sizeof的返回值根据不同的系统它可能是unsigned long long也可能是unsigned int。2.3取值范围不同的数据类型长度是不同的不同长度的内存又决定了存放的数据的范围是不同的。整型家族的取值范围可以在头文件limits.h中查看浮点型家族的取值范围可以在头文件float.h中查看数据类型 字节数 取值范围char 1 -128~127unsigned char2 1 0~255short 2 -32768~32767unsigned short 2 0~65535int 4 -2147483648~2147483647unsigned int 4 0~4294967295long 4 -2147483648~2147483647unsigned long 4 0~4294967295long long 8 -9223372036854775808~9223372036854775807unsigned long long 8 0~18446744073709551615数据类型 字节数 取值范围绝对值float 4 1.17549*10^-38~3.40282*10^38double 8 2.22507*10^-308~1.79769*10^308long double 12 2.22507*10^-308~1.79769*10^3083.ASCII字符集和转义字符3.1SASCII字符集c语言中char类型属于字符类型也可以来表示字符它也属于整型类型那这些字符的值是多少呢对于不同的计算机它的值可能是不同的因为不同的计算机可能采用不同的字符集现在主流的字符集是ASCII字符集你不需要记住ASCII字符集的内容只需要在用的时候上网查看即可。不过我们最好能够记住几组特殊的字符字符A-Z的ASCII值是65-90字符a-z的ASCII值是97-122相应的大小写字符ASCII值相差32字符0-9的ASCII值是48-57#includestdio.h int main() { printf(%d,a);//输出的是字符a的ASCII值 printf(%c,97);//输出的是ASCII为97的字符 return 0; }3.2转义字符转义字符顾名思义就是转变了原来字符意思的字符转义字符分为字符转义字符和数字转义字符字符转义字符\?:在书写连续多个问号时使用防止被解析成三子字母在新的编译器上已经没法验证了\:用于表示字符常量 printf(%c,/);\:用于表示一个字符串内的双引号\\:用于表示一个反斜杠防止他被翻译为转义字符\a:警报\b:退格键终端光标前移一格\n:换行符\r:回车符\t:制表符数字转义字符\ddd:d d d表示1~3个八进制的数字。如\130 表示字符Xprintf(%c\n, X); printf(%c\n, \130); printf(%c\n,88); //上面三个输出均打印字符X大写的\xdd:d d表示两个十六进制的数字。如\x30 表示字符0printf(%c\n, Q); printf(%c\n, \x51);//十六进制数字打印Q printf(%c\n, \121);//八进制数字打印Q printf(%c\n, 81);4.变量学完数据类型后最重要的就是利用数据类型来创建变量变量才是真正能够存储数据的数据类型只不过是告诉内存自己所修饰的变量需要多大的空间这就决定了变量这个“容器”能够装下下多大的数据。c语言中把变化的量成为变量变量在创建时就存数据称为初始化其后的叫做赋值int n10;//初始化 n1;//赋值变量的命名规则变量名只能由数字字母下划线组成变量名不能由数字开头变量名区分大小写长度不超过63个字符变量名最好有意义变量名不能是关键字4.1局部变量局部变量就是在大括号内部或语句块内定义的变量只能在其局限的范围内使用补充作用域就是变量或常量起作用的区域生命周期就是变量或常量起作用的时间作用域在变量所定义的大括号内外部无法访问生命周期程序进入变量所在的大括号内变量向内存申请地址到程序出变量所在大括号内存销毁的这段时间初始化:局部变量未初始化时其值是垃圾值随机数所以一般建议初始化优先级若局部变量和全局变量同名则局部变量优先4.2全局变量全局变量就是在大括号外部定义的变量其使用范围很广在整个工程中都是有办法是用的作用域在整个工程中跨文件使用需要extern声明生命周期从程序运行到程序结束初始化若没有显性初始化默认初始化为0使用建议过度使用全局变量会使模块间的耦合度高调试困难谨慎使用。int num 1;//创建全局变量 void show() { printf(%d\n, num);//打印全局变量1 } int main() { int num 2;//创建了与全局变量同名的局部变量这两个变量是不同的变量存储在内存中的不同位置 printf(%d\n, num);//局部变量和全局变量同名时局部变量优先会在屏幕上打印局部变量的值2 show(); return 0; }int num 1;//创建全局变量num void show() { printf(%d\n, num);//打印1 } int main() { show();//调用show函数打印未修改全局变量前的值 num 2;//修改了全局变量num的值为2 printf(%d\n, num);//打印2 return 0; }5.常量5.1字面常量字面常量就是直接写出来的常量如123‘x’“abc”3.145.1.1字符字面常量‘a’ ‘X’5.1.2整型常量十进制字面常量以0开头的八进制字面常量037相当于十进制的31以0x或0X开头的十六进制字面常量0x1F(相当于十进制的31)5.1.3后缀u或U:表示无符号整数常量unsigned如123ul或L表示长整型常量long int,如12345lll或LL表示长长整型常量如123ll可组合100UL(表示unsigned long)5.1.4浮点型字面常量3.14double3.14ffloat3.14Llong double3.14e3(科学计数法表示3140)5.15字符串字面量“abc”字面变量有类型如10是整型类型10LL是long long类型‘a’是字符型“aaa”类型是char [4]数字/字符字面量无地址是在编译时直接嵌入指令的立即数字符串字面量有地址可以“aaa”5.2宏常量符号常量用#define定义的常量宏常量无类型无地址只是文本符号预处理阶段直接替换#define M 100//使用#deifne定义的常量常量名习惯上都用大写字母命名 int main() { printf(%d, M); return 0; }5.3const修饰的常变量用const修饰的变量本质上还是变量有类型有地址只是编译器禁止的它的赋值操作int main() { const int n 10;//const修饰的变量后该变量变为常变量有类型有地址本质上还是变量只不过编译器禁止的它的赋值操作 n 100;//是错误的 return 0; }

相关新闻

Unity 2D动态光影系统:从原理到实战的完整指南

Unity 2D动态光影系统:从原理到实战的完整指南

1. 项目概述:为什么2D游戏也需要一套专业的灯光系统?在Unity引擎的生态里,提到“灯光”,绝大多数开发者脑海里首先浮现的肯定是那些令人惊叹的3D场景:动态光影、全局光照、体积雾……这些技术栈已经非常成熟。然而&…

2026/10/10 3:34:09 阅读更多 →
【非标自动化】2、认识元器件(压力传感器)

【非标自动化】2、认识元器件(压力传感器)

压力传感器压力传感器是一种把气体或液体的压力转换成电信号的传感器。在非标自动化设备中,压力传感器常用于检测:压缩空气压力真空吸附压力液压系统压力气缸夹紧压力液体管路压力涂胶、点胶压力过滤器前后压力泵出口压力密封性测试压力压力传感器与普通…

2026/10/10 15:32:15 阅读更多 →
【非标自动化】2、认识元器件(编码器)

【非标自动化】2、认识元器件(编码器)

编码器编码器是一种把机械运动的位置、角度、速度或方向转换成电信号的传感器。在非标自动化设备中,编码器通常安装在:电机轴输送线滚筒丝杆转盘升降机构测长轮手轮伺服电机内部可以先把它理解为:接近传感器通常只告诉PLC“到没到”&#xff…

2026/10/12 10:37:41 阅读更多 →

最新新闻

力控组态软件连接Access数据库:ODBC驱动配置与32/64位排查实战

力控组态软件连接Access数据库:ODBC驱动配置与32/64位排查实战

简介:力控组态软件与Access数据库的数据交互PDF教程,面向工业自动化、过程控制领域的组态工程师、上位机开发人员及高职院校相关专业学生,帮助解决力控工程连接并操作Access数据库的常见需求。资源仅含1个PDF文档,压缩包大小1.85M…

2026/10/13 5:19:29 阅读更多 →
LR(1)分析法精讲:从手推项目集到实现一个语法分析器

LR(1)分析法精讲:从手推项目集到实现一个语法分析器

简介:面向编译原理课程的LR(1)分析法实验报告,适合计算机专业本科生、考研复习者及需要完成语法分析实验的开发者。报告以文法E→S、S→BB、B→aB、B→b为例,系统讲解LR(1)分析法的基本原理、ACTION表与GOTO表构造、驱动程序工作流程&#xf…

2026/10/13 5:19:29 阅读更多 →
多模态输入、Harness与MCP:Agent开发三大核心实践指南

多模态输入、Harness与MCP:Agent开发三大核心实践指南

直接开写。这篇笔记不绕弯子,聊的是我最近几个月在搞 Agent 过程中,被问得最多、踩得最深的三块东西:多模态输入、Harness 结构,以及 MCP 接入。如果你正打算从一个“只会调 API 的试用者”往“能设计 Agent 骨架的开发者”迈一步…

2026/10/13 5:19:29 阅读更多 →
vLLM企业私有化部署实战:PagedAttention与高可用推理集群搭建

vLLM企业私有化部署实战:PagedAttention与高可用推理集群搭建

1. 项目概述:为什么企业需要真正可控的私有化大模型服务“vllm企业私有化大模型部署实战指南”——这个标题里,“vllm”不是缩写游戏,而是当前工业级大模型推理加速领域绕不开的硬核代名词;“企业”二字划出了明确边界&#xff1a…

2026/10/13 5:19:29 阅读更多 →
Qt工业控制上位机高效搭建:架构设计、线程模型与核心实践

Qt工业控制上位机高效搭建:架构设计、线程模型与核心实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 5:19:29 阅读更多 →
Agent Harness工程实战:从循环到长时运行的上下文、沙箱与验证

Agent Harness工程实战:从循环到长时运行的上下文、沙箱与验证

1. 从“能跑”到“跑得久”:Harness 工程到底在解决什么第一次接触 Harness 工程这个概念,很多人会把它和“写个 Agent 循环”画等号。我一开始也这么想——不就是让模型反复调用工具、拿到结果再喂回去吗?直到我把一个能跑通 Demo 的 Agent …

2026/10/13 5:18:28 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →