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

C语言中的变量

3. 数据类型的取值范围

上述的数据类型很多,尤其数整型类型就有short、int、long、long long四种,为什么呢? 其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类 型,我们就可以在适当的场景下去选择适合使用的数据类型。

如果要查看当前系统上不同数据类型的极限值:limits.h ⽂件中说明了整型类型的取值范围float.h 这个头⽂件中说明浮点型类型的取值范围。

为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤这些常量。

4.变量

4.1 变量的创建

刚才我们了解清楚了数据类型,那么我们使⽤数据类型做什么呢?>类型是⽤来创建变量的。
什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量
变量创建的语法形式是这样的:

data_type name | | | | 数据类型 变量名

4.1.0 变量的本质(内存视角):

变量的本质内存中一块被命名的存储空间

例如 int age = 18; 时,依次做了 3 件事:

先根据int数据类型,在内存中申请 4 字节(32 位 / 64 位系统通用)的空间,再给这块空间起名字叫age,最后把数值18写入这块空间中.

4.1.1 变量命名的⼀般规则:

(1).只能由字⺟(包括⼤写和⼩写)、数字和下划线 '_' 组成。中文、特殊符号(@ # $ - 等)绝对不能用,部分编译器支持下划线开头,但不推荐(容易和系统内置变量冲突)(但可以作为中间连接).

(2).不能以数字开头。

eg: int 1age; 是语法错误,int age1; 是合法的.

(3).⻓度不能超过63个字符。

C99 标准要求编译器至少支持 63 个有效字符,超过部分部分编译器会截断,建议变量名简洁明了,不要过长.

(4).在变量名中严格区分字母⼤⼩写。

eg:int Age;int age;是两个完全不同的变量,新手极易踩坑.

(5).变量名不能使⽤C语言中的关键字

C 语言有 32 个标准关键字(如int if for return等),不能作为变量名;部分编译器有扩展关键字(如__asm),也不要用.

int age; //整型变量 char ch; //字符变量 double weight; //浮点型变量

4.1.2 最佳命名规范(工程级要求)

(1).见名知意

用有意义的英文单词,比如age代表年龄,weight代表体重,不要用abc这种无意义命名.

(2).风格统一:

  • 小驼峰:userAgestudentScore(Java/JS 常用,C 中也可)(就是第一个单词开头字母小写,后面的所有单词开头字母都大写).
  • 下划线:user_agestudent_score(C 语言工程中最常用,Linux 内核风格)

(3).避免歧义

不要用l(小写 L)、I(大写 i)、O(大写 o)、0(数字 0)这类易混淆字符

4.1.3 变量初始化

如果我们在变量在创建的时候就给它⼀个初始值,那这就叫初始化

// 1. 定义时直接初始化(推荐,最安全) int age = 18; // 2. 先定义,后赋值(注意:未赋值前变量是"垃圾值") int age; age = 18; // 3. 多个同类型变量同时定义+初始化 int a = 1, b = 2, c = 3; // 正确 int a, b = 2, c; // 正确:仅b初始化,a、c未初始化
4.1.3.1常见的坑:

(1). 未初始化就使用变量

int age; printf("%d", age); // 错误!age是随机的"垃圾值",结果不可控

(2). 多个变量定义时漏写类型

int a, b = 10; // 正确:a是int,b是int且初始化为10 int a = 10, b; // 正确 int a, int b = 10; // 错误!第二个int多余,语法报错

(3). 类型不匹配的初始化(隐式转换风险)

int age = 18.9; // 编译器会隐式截断小数,age=18,可能不符合预期 double weight = 48; // 隐式转换为48.0,通常安全,但要注意精度

4.2 变量的分类

变量分为局部变量和全局变量,具体如下:

其中的作用域很重要,局部变量出作用域会被销毁掉,不能再找到使用,而全局变量的生命周期与程序相同.

#include <stdio.h> int global = 2023; //全局变量 int main() { int local = 2018; //局部变量 printf("%d\n", local); printf("%d\n", global); return 0; }

全局变量默认初始化为 0,而局部变量未初始化则是随机值(垃圾值)

#include <stdio.h> int g_global; // 全局变量,默认初始化为0 int main() { int a; // 局部变量,未初始化,值为随机垃圾值 static int b; // 静态局部变量,默认初始化为0 printf("全局变量g_global: %d\n", g_global); // 输出0 printf("局部变量a: %d\n", a); // 输出随机值(如-858993460) printf("静态局部变量b: %d\n", b); // 输出0 return 0; }

如果局部和全局变量,名字相同呢?

当局由此可见当局部变量和全局变量同名的时候,局部变量被优先使用.

4.3 全局变量和局部变量在内存中存储位置

⼀般我们在学习C/C++语⾔的时候,我们会关注内存中的三个区域:栈区、堆区、静态区
1.局部变量是放在内存的栈区
2.全局变量是放在内存的静态区
3.堆区是⽤来动态内存管理的(后期会介绍)

http://www.jsqmd.com/news/650478/

相关文章:

  • 【Java】2026 Java学习路线:语言根基(三)★ 核心
  • 如何在foobar2000中实现智能歌词同步?OpenLyrics插件深度解析
  • WSL2 网络困境突围:为 Antigravity 插件构建透明代理隧道
  • 本体驱动:AI操作系统的范式革命 - 资讯焦点
  • 别再为打印不全发愁了!手把手教你用print-js搞定Vue项目中的超长table打印
  • Unity 2D智能寻路终极指南:5分钟掌握NavMeshPlus核心技巧
  • 移动端响应优化
  • 实战指南:在Qt项目中集成Crashpad实现跨平台崩溃自动上报与分析
  • 2026年新疆新能源汽车漆面防护与轻改升级一站式方案深度横评 - 精选优质企业推荐榜
  • 如何用Java自动化工具告别i茅台手动抢购烦恼:完整指南
  • BetterGI视觉导航系统深度解析:从像素坐标到游戏世界的算法实现
  • Nano-Banana基础教程:如何将AI生成的爆炸图导入SolidWorks作参考
  • 基于N2N实现Windows跨地域局域网联机:从公网服务器搭建到游戏联机实战
  • 【笔面试算法学习专栏】合并K个升序链表:堆与分治的完美结合
  • 单元测试的隐秘角落:如何优雅地“窥探”private方法?
  • Spring-Boot-枚举使用-这8个坑90的人都踩过
  • 2026年开源客服系统哪家好?大模型多语言数据分析呼叫中心集成 - 品牌2026
  • 别再只会点菜单了!EPLAN拖放操作全解析:从符号宏到DWG文件,效率翻倍的隐藏技巧
  • 分析想找小班授课的形象设计培训学校,太原哪家比较靠谱 - 工业品网
  • 从静态防护到流转治理:API风险监测系统如何重塑企业数据安全体系
  • 抖音无水印批量下载工具:如何轻松保存你喜欢的视频内容?
  • Unity WebGL 缓存失效排查:从 Cache API 错误到 loader.js 修复
  • 小目标检测技术演进:从数据增强到无锚点方法的全面解析
  • Matlab图像显示进阶:pcolor与imagesc的格网精细化控制
  • 2026年在线客服哪家好?客服系统机器人推荐及选型指南 - 品牌2026
  • 保姆级教程:用群晖Docker和technosoft2000镜像,5分钟搞定Calibre Web私人书库(附权限避坑指南)
  • 终极中文文献管理方案:如何用Jasminum插件解决Zotero中文元数据识别难题
  • 基于STM32的TCRT5000循迹传感器实战指南:从原理到代码实现
  • 【从0开始学设计模式-8| 桥接模式】
  • 给测试新人的TBOX入门指南:从零看懂车载通信测试到底在测啥