当前位置: 首页 > article >正文

快速学C语言——第 3 章:变量与数据类型

第 3 章变量与数据类型​ 在编程世界中程序需要处理各种数据比如一个人的年龄、一件商品的价格或者一个单词。​ 为了在程序中存储和操作这些数据我们需要用到变量和数据类型。它们是构建程序逻辑的基石决定了数据的存储方式、占用内存大小以及可执行的操作。3.1 变量​ 你可以把一个变量想象成一个带标签的储物箱。这个比喻能帮你快速理解变量的核心作用​ ● 箱子本身它是计算机内存中的一块固定大小的存储空间大小由变量的数据类型决定。​ ● 箱子的名字就是变量名是我们操作数据的 “唯一标识”通过名字就能找到对应的存储空间。​ ● 箱子里的物品就是存储在变量里的数据值这个值可以在程序运行过程中修改比如把 “18” 改成 “19”“变量” 也因此得名。我们用示例来说明#includestdio.h// 引入标准输入输出库intmain(){// 1. 声明并定义两个变量准备两个箱子inta10;// 箱子a里面存放整数10intb20;// 箱子b里面存放整数20printf();return0;}​ 程序一开始我们定义了两个变量箱子变量名箱子名分别是a和b。​ C语言中的是赋值运算符意为“将右边的值放到左边的变量中”它与数学中的等号含义不同。我们可以用这个符号来实现给变量箱子装数据的目的。​ C 语言为了高效管理内存和精确表示数据定义了不同的数据类型。不同的数据类型决定了“箱子”的大小占用的内存字节数和箱子能够存储的数据种类整数、小数、字符等。使用合适的数据类型既能保证数据的正确性又能避免内存的浪费。我们看到的int是表示a、b变量分别占据4个字节并且将用a、b变量来存储整数。3.2 数据类型​不同类型的物品需要不同规格的箱子—— 存放书本的箱子和存放珠宝的箱子大小、材质不同。同样不同类型的数据也需要不同规格的 “容器”变量来存储整数和小数的存储方式不同单个字符和一串文字的存储需求也不同。​ 在 C 语言中变量必须先声明数据类型后使用。这是因为编译器需要根据数据类型提前为变量分配合适大小的内存空间避免内存浪费或数据溢出。​ C 语言的基本数据类型分为三大类具体规格、用途和示例如下3.2.1 整型​ 用于存储没有小数部分的数值整数包括正整数、负整数和 0。​ ●int最常用的整型占 4 个字节32 位系统取值范围约为-2147483648 ~ 2147483647足以满足大多数整数存储需求。​ ●short短整型占 2 个字节取值范围约为-32768 ~ 32767适合存储较小的整数节省内存。​ ●long长整型占 4 或 8 个字节取决于系统取值范围比 int 更大适合存储较大的整数。​ ●unsigned 前缀无符号整型如unsigned int只能存储非负整数取值范围是0 ~ 429496729532 位。​ 示例intage18;// 普通整数shortscore95;// 较小的整数longpopulation1000000;// 较大的整数unsignedintcount50;// 非负整数3.2.2 浮点型​ 用于存储带有小数部分的数值小数支持科学计数法如3.14e2表示 314。​ ●float单精度浮点数占 4 个字节精度约 6-7 位有效数字适合对精度要求不高的场景。​ ●double双精度浮点数占 8 个字节精度约 15-17 位有效数字精度更高是默认推荐的浮点类型如未指定小数会被视为 double。示例floatprice9.99f;// 单精度结尾加f标识否则默认doubledoublepi3.141592653589793;// 双精度高精度场景doubledistance1.5e3;// 科学计数法等价于1500.03.2.3 字符型​ 用于存储单个字符包括字母、数字、符号等占 1 个字节。​ ●char核心字符类型存储的是字符对应的 ASCII 码值如 ‘A’ 对应 65‘0’ 对应 48。​ 字符必须用单引号括起来双引号用于字符串char 可表示的取值范围约为-128 ~ 127unsigned char取值范围为0 ~ 255。示例chargradeA;// 字母字符chardigit5;// 数字字符存储的是ASCII码不是数值5charsymbol#;// 符号字符charnewline\n;// 转义字符换行3.4 如何声明并初始化变量​ 变量的使用分为 “声明” 和 “初始化” 两步声明是告诉编译器 “变量的类型和名字”初始化是给变量赋初始值。​ 语法格式​ ● 声明 初始化推荐数据类型 变量名 初始值;​ ● 先声明后赋值数据类型 变量名;→变量名 初始值;示例#includestdio.hintmain(){// 1. 声明并初始化最常用避免垃圾值。intstudent_count45;// 整型变量。floataverage_score88.5f;// 浮点型变量加f标识float。charfirst_initialD;// 字符型变量。// 2. 先声明后赋值适合变量值需要计算后确定的场景。inttotal_score;total_scorestudent_count*average_score;// 计算后赋值。// 3. 多个同类型变量同时声明可部分初始化。inta10,b,c20;// a和c初始化b未初始化值为垃圾值。// 打印变量值注意格式符与类型匹配。printf(学生人数%d\n,student_count);// %d 表示将student_count变量以整型形式输出。printf(平均分%.1f\n,average_score);// %f → 浮点型.1保留1位小数。printf(姓名首字母%c\n,first_initial);// %c → 字符型。printf(总分%d\n,total_score);// 打印计算后的值。return0;}​ 重要警告切勿使用未初始化的变量未初始化的变量会存储内存中的 “垃圾值”随机值直接使用会导致程序结果异常、崩溃等不可预期的问题。3.5 常量​ 与变量相对有些值在程序运行过程中需要固定不变如圆周率 π、最大人数限制这类值称为常量。C 语言中定义常量有两种常用方式推荐使用const关键字。3.5.1 const 定义常量推荐​ 语法const 数据类型 常量名 初始值;。​ 核心特性​ ● 常量值一旦初始化无法修改编译器会报错。​ ● 有数据类型检查更安全可读性更强。​ ● 常量名建议全大写如PI、MAX_SIZE与变量区分。示例#includestdio.hintmain(){constdoublePI3.1415926535;// 圆周率常量。constintMAX_STUDENTS100;// 最大学生数常量。// PI 3.14; // 错误试图修改const常量编译报错。// MAX_STUDENTS 150; // 错误常量值不可修改。intradius5;doubleareaPI*radius*radius;// 使用常量计算。printf(圆的面积%.2f\n,area);printf(最大学生数%d\n,MAX_STUDENTS);return0;}3.5.2 #define 宏定义常量​ 语法#define 常量名 初始值无分号无数据类型 。​ 特性​ ● 预处理阶段直接文本替换无数据类型检查可能导致隐式错误。​ ● 无需分配内存仅做替换。​ ● 示例#define PI 3.1415→ 编译时所有PI都会替换为3.1415。​ 对比const比#define更安全有类型检查推荐优先使用const。3.6 类型转换​ 当不同类型的变量混合运算时C 语言会自动进行隐式类型转换低精度→高精度也支持显式类型转换强制转换。3.6.1 隐式转换自动转换​ 隐式转换规则是 低精度类型自动转换为高精度类型避免数据丢失。​ 优先级char/short→int→float→double。示例#includestdio.hintmain(){inta10;floatb3.14f;doublecab;// aint自动转换为float结果再转换为double。printf(a b %.2f\n,c);// 输出13.14。return0;}3.6.2 显式转换强制转换​ 语法(目标类型) 变量/表达式。​ 适用场景需要将高精度类型转换为低精度类型可能丢失数据或明确指定转换规则。示例#includestdio.hintmain(){doublepi3.14159;intpi_int(int)pi;// 强制转换为int小数部分被舍弃。printf(pi %.2f\n,pi);// 输出3.14。printf(pi_int %d\n,pi_int);// 输出3数据丢失。return0;}​ 注意强制转换可能导致数据溢出或精度丢失使用时需确保逻辑合理。3.7 变量的作用域​ 变量的作用域指的是变量能被访问的代码范围分为两种基础类型后续章节详细展开​ ● 局部变量在函数内部或代码块如if、for内部声明的变量仅在该函数 / 代码块内有效。​ ● 全局变量在所有函数外部声明的变量整个程序都能访问。示例#includestdio.hintglobal_var100;// 全局变量整个程序可访问。intmain(){intlocal_var200;// 局部变量仅main函数内有效。printf(全局变量%d\n,global_var);// 合法输出100。printf(局部变量%d\n,local_var);// 合法输出200。return0;}voidtest(){printf(全局变量%d\n,global_var);// 合法全局变量可访问。// printf(局部变量%d\n, local_var); // 错误local_var是main的局部变量。}笔记基本数据类型核心分类整型int/short/long、浮点型float/double、字符型char不同类型占用内存和取值范围不同。变量命名必须遵循 “字母 / 下划线开头仅含字母 / 数字 / 下划线” 规则区分大小写禁止使用关键字。变量推荐 “声明即初始化”未初始化的变量会存储垃圾值可能导致程序异常。常量定义优先使用const关键字值不可修改有类型检查#define是宏替换无类型检查慎用。类型转换分为隐式低→高自动和显式强制转换强制转换可能导致数据丢失。变量作用域局部变量函数 / 代码块内有效、全局变量整个程序有效。格式符与数据类型匹配%d整型、%f浮点型、%c字符型不匹配会导致输出异常。

相关文章:

快速学C语言——第 3 章:变量与数据类型

第 3 章:变量与数据类型 ​ 在编程世界中,程序需要处理各种数据,比如一个人的年龄、一件商品的价格,或者一个单词。 ​ 为了在程序中存储和操作这些数据,我们需要用到变量和数据类型。它们是构建程序逻辑…...

Hermes Agent框架接入Taotoken自定义模型提供方的配置要点

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Hermes Agent框架接入Taotoken自定义模型提供方的配置要点 Hermes Agent 是一个流行的智能体开发框架,它允许开发者灵活…...

ChatGPT与MidJourney协同:AI辅助艺术创作实战工作流

1. 项目概述:当艺术创作遇上AI工具作为一名在创意行业摸爬滚打了十多年的从业者,我亲眼见证了无数艺术家、设计师和内容创作者在某个深夜对着空白画布或闪烁的光标,陷入那种熟悉的、令人窒息的“创作瓶颈”。灵感枯竭、风格固化、效率低下&am…...

开源量化框架trading-strategy:DeFi链上策略开发与回测实战指南

1. 项目概述与核心价值最近在量化交易和算法策略开发的圈子里,一个名为tradingstrategy-ai/trading-strategy的开源项目热度持续攀升。作为一名在金融科技和自动化交易领域摸爬滚打了十多年的老兵,我习惯性地会去审视每一个新出现的“明星项目”&#xf…...

将小米TTS封装为OpenAI风格API:实现离线高质量语音合成

1. 项目概述:从“小爱同学”到通用语音合成最近在折腾智能家居和语音交互项目时,我遇到了一个挺有意思的需求:想把小米设备上那个熟悉的“小爱同学”语音,集成到我自己的应用里。你可能也注意到了,像“小爱同学”这样的…...

CipherOcto:去中心化AI基础设施协议架构解析与实践指南

1. 项目概述:从中心化到去中心化的AI基础设施革命如果你和我一样,在过去几年里深度使用过各种AI助手,从ChatGPT到Claude,再到各种开源模型,你一定会被一个核心问题困扰:我的数据去哪了?我的计算…...

CANN/CANN CVE ID申请指导书

CVE ID申请指导书 【免费下载链接】community 本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息 项目地址: https://gitcode.com/cann/community 1 目的 为确保CANN开源社区在漏洞披露过程中&#xff0…...

终极指南:5步掌握REFramework,打造专属RE引擎游戏Mod

终极指南:5步掌握REFramework,打造专属RE引擎游戏Mod 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework 想要为《生化危机》…...

本地AI智能体与云端协作平台混合架构部署指南

1. 项目概述:连接本地AI与云端协作的桥梁如果你正在探索如何将本地运行的AI智能体(Agent)与一个集中的云端控制面板连接起来,让团队成员能随时随地通过网页或手机与应用内的多个AI助手对话,那么你很可能已经遇到了一个…...

你的STM32输入捕获测量结果飘忽不定?可能是滤波器与分频器没搞懂(附实测波形分析)

STM32输入捕获测量不稳定的深层解析:滤波器与分频器的黄金组合 实验室里,你盯着屏幕上跳动的PWM测量数值,眉头紧锁——同样的信号源,为什么每次捕获的频率值都不一样?这不是个例,而是许多嵌入式工程师在使用…...

CANN ops-blas Csrot算子

Csrot算子实现 【免费下载链接】ops-blas 本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。 项目地址: https://gitcode.com/cann/ops-blas 概述 BLAS Csrot算子实现。 Csrot(复数向量旋转)算子实现了对两个复数向量的平面旋转运算,是BLAS…...

AnolisOS 8.8 服务器到手第一件事:保姆级网卡配置与静态IP设置(含DHCP/静态切换)

AnolisOS 8.8 服务器网络配置全攻略:从基础配置到高级调优 刚拿到一台全新的AnolisOS 8.8服务器时,网络配置往往是首要任务。无论你是将服务器部署在本地数据中心还是云环境中,正确的网络配置都是确保服务器可访问性和后续服务部署的基础。本…...

CANN/ops-tensor贡献指南

贡献指南 【免费下载链接】ops-tensor ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。 项目地址: https://gitcode.com/cann/o…...

保姆级教程:用ArcGIS Pro的克里金插值和栅格计算器,搞定水源涵养量评估

从零到精通:ArcGIS Pro水源涵养量评估全流程实战指南 当你第一次在学术论文中看到"水源涵养量评估"这个专业术语时,是否感到无从下手?作为生态规划的基础性工作,准确评估水源涵养能力不仅关系到学术研究的严谨性&#x…...

CANN/ge Format 推导特性分析

Format 推导(Infer Format)特性分析 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型…...

RoboMaster机甲大师赛备赛:如何用STM32+CAN总线精准控制四个大疆3508电机?

RoboMaster机甲大师赛实战:STM32与CAN总线驱动四台大疆3508电机的工程指南 在RoboMaster机甲大师赛中,机器人底盘的运动性能直接决定了战术执行的灵活性和稳定性。四台大疆3508电机通过CAN总线协同工作,需要解决从硬件配置到软件算法的系统工…...

CANN具身智能世界模型指南

cosmos-transfer2.5-2B视频风格转换具身智能世界模型昇腾使用指南 【免费下载链接】cann-recipes-embodied-intelligence 本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-embodied-i…...

别再只盯着原理了!深入MOS管米勒平台,看懂缓启动电路性能优化的关键

深入MOS管米勒平台:缓启动电路性能优化的关键策略 在电源系统设计中,缓启动电路的重要性往往被低估。许多工程师满足于实现基本功能,却忽略了性能优化的深层机理。当面对更快的稳定时间要求或更精确的电流控制需求时,仅理解基础工…...

CANN pi0.5昇腾推理指南

pi0.5机器人VLA大模型昇腾使用指南 【免费下载链接】cann-recipes-embodied-intelligence 本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence pi0.5整体介绍…...

CANN/sip批量矩阵向量乘法

CgemvBatched 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 产品支持情况 产品是否支持Atlas 200I/500 A2 推…...

M-LLM 赋能高效视频理解:基于帧选择的优化策略深度解析

随着短视频平台的蓬勃发展,视频数据的爆炸式增长给视频理解带来了巨大的挑战。传统的视频理解方法往往需要处理大量的视频帧,计算成本高昂。为了解决这个问题,研究人员提出了基于 M-LLM (Multimodal Large Language Model) 的视频帧选择策略&…...

Balena Etcher:极致安全的跨平台镜像烧录工具深度解析

Balena Etcher:极致安全的跨平台镜像烧录工具深度解析 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为制作启动盘而烦恼吗?无论是树…...

CANN PTO自动模式总览

auto模式总览 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend p…...

AzurLaneAutoScript深度解析:碧蓝航线自动化脚本的技术架构与实践应用

AzurLaneAutoScript深度解析:碧蓝航线自动化脚本的技术架构与实践应用 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript…...

3步解锁高效工作流:KeymouseGo终极鼠标键盘自动化指南

3步解锁高效工作流:KeymouseGo终极鼠标键盘自动化指南 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否厌…...

如何用ContextMenuManager一键净化Windows右键菜单:3个核心功能完全指南

如何用ContextMenuManager一键净化Windows右键菜单:3个核心功能完全指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾因Windows右键菜单臃…...

CANN/catlass 3D卷积偏置算子示例

ConvBias Example Readme 【免费下载链接】catlass 本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。 项目地址: https://gitcode.com/cann/catlass 代码组织 ├── 24_conv_bias │ ├── CMakeLists.txt # CMake编译文…...

CANN/catlass优化矩阵乘示例

OptimizedMatmul Example Readme 【免费下载链接】catlass 本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。 项目地址: https://gitcode.com/cann/catlass 代码组织 ├── 06_optimized_matmul │ ├── CMakeLists.txt …...

基于Python标准库构建本地代码解释器:原理、实现与应用

1. 项目概述:一个本地化的代码解释器最近在折腾一些自动化脚本和数据处理任务时,我常常遇到一个场景:手头有一段代码片段,想快速验证一下它的逻辑或者看看输出结果,但要么得打开一个笨重的IDE,要么得在命令…...

【收藏】2026年AI行业最大的机会,毫无疑问就在应用层!

🔥小白必看|程序员速收藏!2026年AI风口已至,错过再等三年! 字节跳动早已嗅到风口,7个核心团队全速布局Agent智能体,从抖音安全业务到全场景落地,持续加码AI应用层布局;腾…...