第三章:C 语言基础概念 —— 变量与数据类型

发布时间:2026/9/28 19:45:16

第三章:C 语言基础概念 —— 变量与数据类型 前言欢迎来到第三章在上一章中我们认识了一个 C 程序的完整结构头文件、主函数、语句。但我们写的程序都是 固定的—— 输出什么内容在写代码的时候就定死了。如果我想让程序 记住 一些东西呢比如用户输入的数字、计算的中间结果,这时候就需要变量了。而变量又有不同的类型—— 有的存整数有的存小数有的存字符,为什么要分这么多种类型每种类型有什么特点本章我们就来搞清楚这两个最重要的基础概念什么是变量变量怎么用什么是数据类型C 语言有哪些基本类型这一章是后面所有内容的基础一定要吃透哦一、什么是变量1.1 变量的通俗理解变量就是一个有名字的 盒子用来存放数据。想象一下你有一个盒子上面贴着标签叫age你往盒子里放了一个数字18后来你又把 18 拿出来换成了 20这个盒子里的东西是可以变的所以叫变量int age 18; // 造一个叫age的盒子放进去18 age 20; // 把盒子里的东西换成201.2 变量的本质内存从计算机底层来看变量本质上就是一块内存空间。内存就像一个大仓库被分成了一个个小格子每个小格子都有一个地址门牌号变量就是给某一块内存空间起了个名字通过这个名字我们就能读写这块内存里的数据内存地址 0x100 0x101 0x102 0x103 ... ┌─────┬─────┬─────┬─────┐ 数据 │ 18 │ │ │ │ ... └─────┴─────┴─────┴─────┘ ↑ 变量age指向这里不过对初学者来说不用太纠结底层细节先记住 变量就是装数据的盒子 就够了。1.3 为什么需要变量你可能会问直接写数字不行吗为什么还要用变量因为变量有三大好处① 方便修改// 如果不用变量想改年龄得改好几个地方 printf(我今年18岁\n); printf(明年我就19岁了\n); printf(18岁正是好年纪\n); // 用变量的话改一处就行 int age 18; printf(我今年%d岁\n, age); printf(明年我就%d岁了\n, age 1); printf(%d岁正是好年纪\n, age);② 保存中间结果// 计算长方形面积把结果存起来后面用 int width 5; int height 3; int area width * height; printf(面积是%d\n, area);③ 接收用户输入int num; scanf(%d, num); // 把用户输入的数字存到num变量里简单说有了变量程序才能 记住 东西才能 活 起来。二、什么是数据类型2.1 为什么要有类型你可能又会问变量就是装数据的盒子那所有盒子都一样大不行吗为什么还要分类型因为不同的数据需要的空间大小不一样一个整数可能 4 个字节就够了一个小数可能需要 8 个字节一个字符1 个字节就够了如果所有盒子都按最大的做就会浪费空间。就像你不会用行李箱装一支笔一样 —— 大材小用。所以 C 语言把数据分成了不同的类型每种类型占用的内存大小不同能表示的数值范围不同支持的运算也不同2.2 C 语言的基本数据类型C 语言的基本数据类型主要分三大类类型分类关键字用途整型int、short、long、long long存整数正整数、负整数、零字符型char存单个字符字母、数字、符号浮点型float、double、long double存小数还有一个特殊的void类型表示 什么都没有后面讲函数的时候会遇到。下面我们一个一个来讲。三、整型整数类型3.1 int最常用的整型int是最常用的整数类型全称是 integer整数。int age 18; // 正整数 int temperature -5; // 负整数 int zero 0; // 零int通常占用4 个字节32 位能表示的范围大约是-2,147,483,648 到 2,147,483,647对初学者来说int基本够用了平时写代码用int就行。3.2 其他整型除了int还有几种整型各有不同的大小类型通常大小位数范围2 的次方表达范围数值说明short2 字节16 位-2¹⁵ ~ 2¹⁵ - 1-32,768 ~ 32,767短整型int4 字节32 位-2³¹ ~ 2³¹ - 1-2,147,483,648 ~ 2,147,483,647最常用整型默认long4 或 8 字节32 或 64 位至少 -2³¹ ~ 2³¹ - 1至少正负 21 亿长整型平台相关long long8 字节64 位-2⁶³ ~ 2⁶³ - 1-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807更长的整型简单记越往后能存的数越大但占用的空间也越多。新手提示初学阶段你就放心用int基本不会出错。等后面遇到 数字太大装不下 的情况再考虑用long long。3.3 有符号和无符号默认情况下整型是有符号的 —— 既能存正数也能存负数。如果你确定只存非负数0 和正整数可以加unsigned关键字变成无符号整型unsigned int age 18; // 无符号整型只能存0和正数无符号的好处是正数范围更大了因为不用给负数留位置了。比如unsigned int的范围就是0 到 4,294,967,295。四、字符型char4.1 char存单个字符char是字符类型用来存单个字符—— 比如一个字母、一个数字、一个符号。char grade A; // 大写字母 char ch a; // 小写字母 char digit 5; // 数字字符注意和数字5不一样 char symbol ; // 符号⚠️注意字符要用单引号 包起来不是双引号A是一个字符A 是一个字符串后面会讲4.2 char 的本质ASCII 码虽然char叫 字符型但它本质上也是一个整数 —— 每个字符对应一个数字编号这就是ASCII 码。所以char其实就是一个比较小的整型通常占1 个字节范围是 -128 ~ 127。你甚至可以把它当整数用char c A; printf(%c\n, c); // 输出字符A printf(%d\n, c); // 输出ASCII码65运行结果A 65很神奇吧字符和数字在底层是相通的。小技巧小写字母比对应的大写字母大 32。比如 a-A 32。记住这个后面写大小写转换的代码会用到。五、浮点型小数类型5.1 float 和 double浮点型就是用来存小数的也叫实数类型。C 语言有三种浮点型表格类型通常大小精度说明float4 字节约 6~7 位有效数字单精度浮点double8 字节约 15~16 位有效数字双精度浮点最常用long double8 或 16 字节更高精度长双精度很少用简单说double比float更精确占用空间也更大。5.2 怎么用float pi 3.14f; // float类型后面加个f double height 1.75; // double类型最常用新手提示写小数的时候默认是double类型。如果要表示float后面要加f或F。初学阶段建议直接用double精度高也不用纠结后缀。5.3 输出浮点型输出浮点型用%f格式控制符double pi 3.1415926; printf(π %f\n, pi);输出π 3.141593默认会输出 6 位小数。如果想控制小数位数可以这样写printf(π %.2f\n, pi); // 保留2位小数 printf(π %.4f\n, pi); // 保留4位小数输出π 3.14 π 3.1416⚠️注意浮点数有精度问题不能精确表示所有小数。比如 0.1 在二进制里是无限循环小数存的时候会有微小误差。初学阶段不用太纠结知道有这回事就行。六、变量的声明和使用6.1 如何声明变量使用变量之前必须先声明也叫定义。声明变量的语法类型名 变量名;比如int age; // 声明一个int类型的变量叫age double height; // 声明一个double类型的变量叫height char grade; // 声明一个char类型的变量叫grade声明变量的意思就是我要一个盒子类型是 XX名字叫 XX。6.2 初始化声明变量的时候可以直接给它赋值这叫初始化int age 18; // 声明的同时初始化 double pi 3.14; // 声明的同时初始化 char c A; // 声明的同时初始化也可以先声明后赋值int age; // 先声明 age 18; // 后赋值⚠️重要提醒局部变量如果不初始化里面的值是随机的、不确定的千万不要直接用未初始化的变量否则结果会很奇怪。一定要养成 声明就初始化 的好习惯。6.3 变量命名规则给变量起名字要遵守几个规则✅可以用字母a-z, A-Z数字0-9下划线_❌不能用不能以数字开头不能有空格、加减乘除等特殊符号不能是 C 语言的关键字比如int、if、for这些另外C 语言区分大小写age和Age是两个不同的变量。6.4 命名建议语法是底线更重要的是起一个好名字✅好的命名int age; // 年龄 int student_age; // 学生年龄 double price; // 价格 char grade; // 等级❌不好的命名int a; // 鬼知道a是什么 int nianling; // 用拼音不专业 int sAge; // 什么意思 int _123; // 虽然合法但看不懂经验之谈好的变量名应该 见名知意—— 别人一看名字就知道这个变量是干什么的。命名是程序员的基本功从第一天开始就要养成好习惯。七、综合示例学了这么多让我们来看一个完整的例子把变量和类型都用起来#include stdio.h int main() { // 声明各种类型的变量并初始化 int age 18; char grade A; double height 1.75; float weight 65.5f; // 输出各个变量的值 printf(年龄%d岁\n, age); printf(等级%c\n, grade); printf(身高%.2f米\n, height); printf(体重%.1f公斤\n, weight); // 修改变量的值 age age 1; // 年龄加1 printf(明年我就%d岁了\n, age); return 0; }运行结果年龄18岁 等级A 身高1.75米 体重65.5公斤 明年我就19岁了每一行的作用都看懂了吗⚠️ 关于本文由于笔者水平有限文中难免存在疏漏、错误或表述不够准确的地方。如果你在阅读过程中发现了任何问题 —— 无论是概念错误、代码 bug、还是表述不清 —— 都欢迎在评论区留言指正我会及时修正。技术之路道阻且长行则将至。我们互相学习共同进步
延伸阅读

更多相关文章

2026/9/28 21:48:33

如何快速搭建企业级后台管理系统?Layui-Admin终极指南

如何快速搭建企业级后台管理系统?Layui-Admin终极指南 【免费下载链接】layui-admin 基于layui2.x的带后台的通用管理系统 项目地址: https://gitcode.com/gh_mirrors/la/layui-admin 还在为搭建后台管理系统而烦恼吗?😫 面对复杂的权…

2026/9/29 5:58:37

Barra 模型 Python 实战:基于 A 股数据构建 10 个风格因子的截面回归

Barra模型Python实战:基于A股数据构建10个风格因子的截面回归在量化投资领域,多因子模型是解释股票收益的核心工具之一。Barra模型作为业界广泛使用的风险模型框架,通过系统性地分解股票收益来源,为投资组合构建和风险管理提供了强…

2026/9/29 9:14:30

测试用例设计万能思路:六种核心方法助你打造高质量用例

做了这么多年测试,我见过太多人写用例时盯着需求文档发呆,然后凭感觉刷刷刷列出一堆用例,评审会上被追问两句就底虚。测试用例这东西,看起来就是“前置条件 操作步骤 预期结果”,可为什么不同人写出来的用例质量和数…

2026/9/29 9:14:30

Codex配置本地自定义Agent:TOML、AGENTS.md与优先级实战

如果你想让 Codex 成为真正服务于自己项目的本地自定义 Agent,那 TOML、AGENTS.md 和优先级这三个词会是你绕不开的关卡。我最早以为把配置里的模型名改成 DeepSeek 就能直接跑,结果命令行反复报错,最后才明白,接入点、项目指令、…

2026/9/29 9:14:30

C++异常处理最佳实践:从错误模型到RAII与安全设计

1. 为什么异常处理的“最佳实践”首先是取舍问题1.1 异常不是 bug,而是一种错误上报机制但凡用 C 写过一段时间的人,都会遇到这种争论:异常到底该不该用?C 异常处理从语言诞生之初就带着争议,一部分老派开发者坚持 “异…

2026/9/29 9:14:30

AI写代码、不画帧:Opus 5.5+Python+FFmpeg生成30秒粒子动画全解析

事情是这样的。我想让 Opus 5.5 帮我做一条 30 秒的视频,但最后成品里它一帧都没「生成」——所有画面,没有一帧是 AI 直接画出来的。你可能觉得这很怪,但恰恰是这次尝试,让我彻底理解了 AI 在视频创作里真正该站的位置。它不是替…

2026/9/29 9:09:29

CFBench 评测实战:用 TaoToken 统一 Key 跑通 LLM 约束遵循基准

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

2026/9/28 3:03:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/28 6:05:15

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 0:04:04

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:04:04

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/29 6:36:14

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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