C语言学习笔记——数据类型和常量变量

发布时间:2026/10/26 2:00:55

C语言学习笔记——数据类型和常量变量 C语言学习笔记——数据类型和常量变量今天是 Mii 学习 C 语言的第三天。这两天 Mii 学习了 C 语言的数据类型和常量变量话不多说现在就把这两天学到的知识整理一下吧٩(๑•̀ω•́๑)۶下面来盘点一下 C 语言的各种数据类型。不过 Mii 这两天学习的主要是其中的内置数据类型。1char//character23charch//使用char创建字符变量在 C 语言中字符要用一对单引号括起来比如x、a、w这些字符的类型就是 char。1.2 整型整型的英文单词是 integer在 C 语言中用 int 表示整型类型。1int23intnum;//使用int类型创建整型变量在 C 语言中100、20、35 这些整数的类型就是 int。1.3 浮点型1float//单精度浮点型2double//双精度浮点型34floatnum1;//使用float创建变量5doublenum2;//使用double创建变量在C语言中3.14、5.5这些小数类型默认是double类型3.14f这种写法表示float类型。1.4布尔类型C语言在C89/C90时期并没有为布尔值设置一个类型使用整数0表示假非零值表示真。后来在C99标准中也引入了布尔类型是专门表示真假的。1_Bool布尔类型的取值是true或false这两个符号是定义在stdbool.h头文件中的。1#define bool_Bool23#define false04#define ture1布尔类型的使用一般得包含头文件stdbool.h代码演示#includestdio.h#includestdbool.hintmain(){_BoolYUZUtrue;if(YUZU)printf(Ciallo(∠·ω )⌒★);return0;}一直到C23这个标准才把bool、true、false定义为C语言关键字使用bool类型不再依赖stdbool.h这个头文件了。2.类型修饰符前面介绍的数据类型其实已经解决一部分问题但是在真实的开发过程中还是不够为了让内置类型提供更精细的数据表示能力C语言中还引入了类型修饰符1//和内存长度有关的2short3long45//和符号相关的6signed7unsigned2.1 short和longshort和long是和内存长度有关的两个类型修饰符。1int//标准的整型23//修饰整型4short[int]//短整形5long[int]//长的整型6longlong[int]//长的整型7//[]中的内容是可以省略的89//修饰浮点型10longdouble//C99中引入short和long是用来修饰整型类型。常规的整型类型是int长度是4个字节short int类型的长度是2个字节。C语言标准规定long int的长度是大于等于int长度的。要想知道每个数据的类型的长度可以使用sizeof来计算sizeof是C语言的一个操作符sizeof可以算出一个数据类型的长度单位是字节使用方法是sizeof(type)type就是对应的数据类型sizeof计算的结果是size_t类型的打印的时候应该使用%zu的占位符下面演示代码#includestdio.h#includestdbool.hintmain(){_Boolflagtrue;if(flag)printf(I like C\n);printf(char: %zu\n,sizeof(char));printf(_Bool: %zu\n,sizeof(_Bool));printf(short: %zu\n,sizeof(short));printf(int: %zu\n,sizeof(int));printf(long: %zu\n,sizeof(long));printf(long long: %zu\n,sizeof(longlong));printf(float: %zu\n,sizeof(float));printf(double: %zu\n,sizeof(double));printf(long double: %zu\n,sizeof(longdouble));return0;}注long和long double类型的长度是和平台采用的数据模型有关的。数据模型指的是在特定操作系统、CPU架构和ABI应用程序二进制接口下C/C等语言中基本数据类型short、int、long、long long以及指针类型的具体位宽字节数的约定。下面是Mii的电脑算出的值不同的电脑不同的编译器算出的值可能不同特别是long类型和long double那么long的长度有时是4个字节有时是8个字节我们如果想要使用确切长度且和平台不同无关的整型类型该怎么办呢这个时候就要看stdint.h这个头文件这里边提供了确切长度且和平台无关的整型类型这些类型在嵌入式开发中使用很常见。2.2 signed和unsignedsigned 和 unsigned 是和符号相关的两个类型修饰符专门修饰字符型和整型类型的。signed 关键字表示一个类型带有正负号可以表示正整数、负整数和0unsigned 关键字表示该类型不带有正负号只能表示零和正整数。类型有符号类型无符号类型charsigned charunsigned charshort [int][signed] short [int]unsigned short [int]int[signed] intunsigned intlong [int][signed] long [int]unsigned long [int]long long [int][signed] long long [int]unsigned long long [int]对于int类型默认是带有正负号的也就是说int等同于signed int。由于这是默认情况关键字signed一般都省略不写但是写了也不算错。但是C 语言中 char 有可能是 signed char也有可能是 unsigned char具体等价于哪个是编译器的具体实现定义的。这一点和 int 类型是有差异的。前面通过 sizeof 算出长度的类型是 size_tsize_t 就是无符号整型因为长度不可能是负数。sizeof 操作符的返回值C 语言只规定是无符号整数并没有规定具体的类型而是留给系统自己去决定sizeof 到底返回什么类型。不同的系统中返回值的类型有可能是 unsigned int也有可能是 unsigned long甚至是 unsigned long long对应的 printf() 占位符分别是 %u、%lu 和 %llu。这样不利于程序的可移植性。C 语言提供了一个解决方法创造了一个类型别名 size_t用来统一表示 sizeof 的返回值类型对应当前系统的 sizeof 的返回值类型可能是 unsigned int也可能是 unsigned long long。size_t 类型的值在打印时的占位符是 %zu。2.3取值范围我们看到不同的数据类型长度是不同的长度不同又决定了存放的数据的范围是不同的这里我们看一下不同数据类的取值范围。整型家族的取值范围可以在 limits.h这个头文件中查看浮点型家族的取值范围可以在float.h这个头文件中查看类型大小字节取值范围有符号char1-128 到 127short2-32,768 到 32,767int432/64位系统-2,147,483,648 到 2,147,483,647long4 或 8-2,147,483,648 到 2,147,483,64732位/ -9.22e18 到 9.22e1864位实测long long8-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807float4±1.2E-38 到 ±3.4E38约 6-7 位有效数字double8±2.3E-308 到 ±1.7E308约 15-16 位有效数字long double8 或 16在 x86 架构下通常是 80 位10 字节取值范围比 double 更大为了代码的可移植性需要知道某种整数类型的极限值时应该尽量使用这些常量。SCHAR_MINSCHAR_MAXsigned char 的最小值和最大值。SHRT_MINSHRT_MAXshort 的最小值和最大值。INT_MININT_MAXint 的最小值和最大值。LONG_MINLONG_MAXlong 的最小值和最大值。LLONG_MINLLONG_MAXlong long 的最小值和最大值。UCHAR_MAXunsigned char 的最大值。USHRT_MAXunsigned short 的最大值。UINT_MAXunsigned int 的最大值。ULONG_MAXunsigned long 的最大值。ULLONG_MAXunsigned long long 的最大值。3.ASCII字符集和转义字符3.1 ASCII字符集在C语言中char类型是字符类型用来表示字符但也是属于整型家族的那这些字符的值是多少呢比如a的值是多少x的值是多少呢这里的值可能根据计算机的不同而不同。因为不同的机器可能使用不同的字符集当前我们见到的Windows/Linux/macOS平台上采用ASCII字符集而在IBM大型机等老旧或专用系统还使用EBCDIC字符集我们主要掌握现在主流的ASCII字符集就行。在ASCII字符集中规定了128个字符的对应的数值如下图后来ASCII码常被扩展为256个字符目的是兼容更多国家语言中的字符。下列码表含有全部128个ASCII十进制dec、八进制oct、十六进制hex及字符ch编码。3. ASCII 码表128 项decocthexchdecocthexchdecocthexchdecocthexch0000NUL (空)324020(空格)641004096140601101SOH (标题开始)334121!6510141A9714161a2202STX (正文开始)3442226610242B9814262b3303ETX (正文结束)354323#6710343C9914363c4404EOT (传送结束)364424$6810444D10014464d5505ENQ (询问)374525%6910545E10114565e6606ACK (确认)3846267010646F10214666f7707BEL (响铃)3947277110747G10314767g81008BS (退格)405028(7211048H10415068h91109HT (横向制表)415129)7311149I10515169i10120aLF (换行)42522a*741124aJ1061526aj11130bVT (纵向制表)43532b751134bK1071536bk12140cFF (换页)44542c,761144cL1081546cl13150dCR (回车)45552d-771154dM1091556dm14160eSO (移出)46562e.781164eN1101566en15170fSI (移入)47572f/791174fO1111576fo162010DLE (退出数据链)48603008012050P11216070p172111DC1 (设备控制1)49613118112151Q11316171q182212DC2 (设备控制2)50623228212252R11416272r192313DC3 (设备控制3)51633338312353S11516373s202414DC4 (设备控制4)52643448412454T11616474t212515NAK (反确认)53653558512555U11716575u222616SYN (同步空闲)54663668612656V11816676v232717ETB (传输块结束)55673778712757W11916777w243018CAN (取消)56703888813058X12017078x253119EM (媒介结束)57713998913159Y12117179y26321aSUB (替换)58723a:901325aZ1221727az27331bESC (退出)59733b;911335b[1231737b{28341cFS (文件分隔符)60743c921345c\1241747c|29351dGS (组分隔符)61753d931355d]1251757d}30361eRS (记录分隔符)62763e941365e^1261767e~31371fUS (单元分隔符)63773f?951375f_1271777fDEL (删除)也可以通过代码看一下这些字符对应的数值。#includestdio.hintmain(){printf(%d\n,x);printf(%d\n,#);return0;}3.2转译序列通常情况下字符是被单引号括起来的单个字符比如‘a’‘x’但是ASCII码值从0~31的字符是不可打印字符为了使程序可以处理字符集中的每一个字符C语言提供了一种特殊的表示法转义序列。转义序列有2种字符转义序列和数字转义序列。字符转义序列转义字符解释\?在书写连续多个问号时使用防止他们被解析成三字母词在新的编译器上没法验证了。\用于表示字符常量\用于表示一个字符串内部的双引号\\用于表示一个反斜杠防止它被解释为一个转义序列符。\a警报这会使得终端发出警报声或出现闪烁或者两者同时发生。\b退格键光标回退一个字符但不删除字符。\f换页符光标移到下一页。在现代系统上这已经反映不出来了行为改成类似于\v。\n换行符一般使用在屏幕上打印信息时实现换行的效果\r回车符光标移到同一行的开头。\t制表符光标移到下一个水平制表位通常是下一个 4/8 的倍数。\v垂直分隔符光标移到下一个垂直制表位通常是下一行的同一列。数字转译序列转义字符解释进制形式\dddddd 表示 1~3 个八进制的数字。如\130表示X字符的 8 进制表示形式\xdddd 表示 2 个十六进制数字。如\x30表示字符0字符的 16 进制表示形式数字转义序列可以表示ASCII字符集中的所有字符。需要把一个字符写成数字转义序列查看一下ASCII字符集中字符对应的8进制数值和16进制数值就很好转化了。4.变量和常量4.1变量变量命名的一般规则变量的名字起得要有意义见名知意。只能由字母包括大写和小写、数字和下划线‘_’组成。不能以数字开头。长度不能超过63个字符。变量名中区分大小写的。变量名不能使用关键字。变量的创建方法如下charch;intage;doubleweight;变量在创建的时候给一个初始值就叫初始化如下所示charchw;intage18;doubleweight48.0;4.2变量的分类全局变量在函数之外定义的变量称为全局变量作用域从定义位置开始到整个源文件末尾都可见如果其他文件想用可通过 extern 声明。生命周期在程序启动时创建程序结束时才销毁存储在内存的静态存储区/数据段。初始值如果没有显式初始化系统会自动初始化为0或 ‘\0’、NULL。使用注意过多使用全局变量会导致模块间耦合度高、调试困难建议谨慎使用。全局变量代码演示#includestdio.hinta100;//全局变量voidshow(){printf(全局变量值%d\n,a);}intmain(){show();a200;printf(修改后%d\n,a);return0;}局部变量在大括号内部定义的变量就是局部变量作用域仅限于定义它的函数或代码块内部外部无法访问。生命周期在进入函数/代码块时创建退出时自动销毁存储在内存的栈区。初始值如果没有显式初始化其值是垃圾值不确定的随机数建议对局部变量进行初始化。优先级当局部变量与全局变量同名时优先使用局部变量。局部变量代码演示voidfunc(){intlocalVar10;//局部变量printf(%d\n,localVar);}intmain(){//printf(%d\n, localVar);//错误main函数无法访问func中的localVarreturn0;}4.3常量C语言中常量和变量的定义形式有所差异。C语言中常量分为以下几种字面常量const修饰的常变量------const只读不能被修改被const修饰的变量不能被修改具有常量的属性#define定义的标识符常量枚举常量啊~就写这么多吧Mii写累了(;´Д)
延伸阅读

更多相关文章

2026/10/26 2:00:55

角色设定工程化:角色卡、系统提示词与人设一致性回归

先明确一件事:“S级厉鬼:梦中人”不是一个能直接 clone 下来跑 demo 的仓库,它是一份角色设定——杨间鬼梦在平行世界形成的变种,并且拥有成年人智慧。放到技术博客的场景里,真正值得写的不是设定本身有多离奇&#xf…

2026/10/26 2:00:55

macos支持的声音克隆软件有哪些?5款Mac剪辑工具横评实测

很多 Mac 用户在找 macos支持的声音克隆软件 时发现,主流云端方案要么延迟高,要么无法直接接入剪辑流水线。声音克隆是指通过少量音频样本提取说话人音色特征并生成新语音的技术。鲸剪(WhaleClip)是一款面向短视频创作者与团队的 …

2026/10/26 4:16:02

营销技能的本质:系统性思维四维模型

1. 这不是“学个话术”就能搞定的事:为什么90%的营销技能训练都跑偏了“marketingskills”——这个词最近在招聘平台、知识付费页面和职场社群里高频刷屏,但它背后藏着一个巨大的认知陷阱:很多人把它当成一套可速成的“话术模板”或“流量套路…

2026/10/26 4:16:02

大模型双层优化:零阶与一阶混合策略解析

1. 项目概述:当大模型遇上双层优化2025年NIPS会议上最让我眼前一亮的,莫过于这个名为"Bilevel ZOFO"的大语言模型优化框架。作为一名经历过三次完整LLM训练周期的算法工程师,我深知传统微调方法在计算成本和泛化能力上的局限。这个…

2026/10/26 4:16:02

RabbitMQ交换机机制与消息路由实战指南

1. RabbitMQ交换机核心机制解析RabbitMQ作为AMQP协议最成熟的实现,其交换机系统堪称消息路由的中枢神经。我在金融支付系统架构中深度使用RabbitMQ五年,发现90%的消息路由问题都源于对交换机机制的误解。不同于常见的队列直连模式,交换机的四…

2026/10/26 4:16:02

张量梯度计算全解析:从反向传播原理到调试避坑实战

张量梯度计算这件事,说穿了就是一句话:让框架替你记住每一步运算,然后在需要的时候把“谁影响了谁、影响多大”一次性算清楚。我见过太多人把backward()当成一个黑盒按钮,能跑通就完事,一旦遇到梯度是None、梯度累加不…

2026/10/26 4:11:01

商业显示行业AI与空间计算技术趋势解析

1. 商业显示行业的现状与挑战商业显示行业正在经历一场前所未有的技术变革。从传统的广告机、数字标牌到如今的智能交互终端,显示设备已经不再是简单的信息展示工具。过去三年间,全球商业显示市场规模以年均12%的速度增长,但同时也面临着同质…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑