发表于 C语言
很多初学者容易在这里被“前缀”和“后缀”绕晕,
一、 基本符号与含义自增自减属于单目运算符(只需要一个变量就能完成计算),其作用是直接修改变量自身的值。
运算符
含义说明
相当于
++
变量中的值 +1
a = a + 1;
--
变量中的值 -1
a = a - 1;
二、 核心语法规则:独立成行
📌 金牌铁律:++ 和 -- 既可以放在变量的前边,也可以放在变量的后边。如果它们【单独写一行】,运算结果是完全一样的。
课件案例深度拆解我们来看最后一张图的经典代码流,追踪变量 a 在内存中每一步的变化:
12345678int a = 10; // 初始状态:a 的值是 10a++; // 步骤 1:后缀自增,a 自身加 1。此时 a 变成 11++a; // 步骤 2:前缀自增,a 自身加 1。此时 a 变成 12a--; // 步骤 3:后缀自减,a 自身减 1。此时 a 变成 11--a; // 步骤 4:前缀自减,a 自身减 1。此时 a 变成 10 ...
发表于 C语言
一、 强制类型转换基础1. 什么时候需要强制转换?当我们需要把取值范围大(或精度高)的数据,赋值给取值范围小(或精度低)的变量时,编译器无法自动处理,必须由程序员手动触发强制转换。
Ps. 关于数据精度char < short < int < long < long long < float < double
2. 语法格式在被转换的数据(或表达式)前面加上小括号,括号内写上目标数据类型:
目标数据类型 变量名 = (目标数据类型)被强转的数据;
示例代码:
12int b = 10;short i = (short)b; // 把 4 字节的 int 强转为 2 字节的 short
二、 强转的底层原理与弊端(数据截断)强制类型转换的弊端是可能导致数据错误。从底层的二进制内存来看,它的本质是高位截断:
🔍 案例分析(以 int b = 10; 强转为 short 为例)
int 在内存中占 4 字节(32位二进制): 00000000 00000000 00000000 00001010
当强转为 short(占 2 字节,16位二进制) ...
C-Notes
未读发表于 C语言
1. 关键结论:整型提升(Integer Promotion)
规则:short 和 char 类型的数据在参与运算(如加、减法等)的时候,系统会先自动将它们提升为 int 类型,然后再进行运算。
背后的逻辑:字符在计算机底层其实就是一串二进制数字(即 ASCII 码)。
因此,char 类型的本质就是一个小整型,它完全可以像数字一样参与加减运算。
2. 案例拆解案例 A:字符转化为数字参与运算12char c = 'a';int i = 97 + 1; // 最终 i 的值为 98
解析:字符 'a' 对应的 ASCII 码值是 97。当执行类似 'a' + 1 的运算时,'a' 会先变成 int 型的 97,再加上 1 得到 98。
案例 B:输出格式决定显示结果123char c = 97;printf("%d\n", c); // 输出结果:97 (以占位符 %d 整型格式打印)printf("%c\n", c); // 输出结果:'a'( ...
发表于 C语言
一、 隐式转换基础1. 什么是隐式转换?当不同数据类型的变量进行计算、赋值等操作时,编译器会自动将它们转换为同一种类型后再进行处理,这个过程称为隐式类型转换。
2. 取值范围大小顺序在讨论转换规则前,需要明确各类型的取值范围(权重)大小:
char < short < int < long < long long < float < double
二、 核心转换规则规则 1:常规晋升(小拓宽到大)
原理:当取值范围小的类型与取值范围大的类型进行混合运算时,范围小的类型会先自动提升为范围大的类型,然后再进行运算。
目的:防止数据溢出,保证运算精度。
规则 2:整型提升(整型特例)
原理:char 和 short 类型的数据在参与运算时,无论有没有和更高等级的类型混合,都会直接先无条件提升为 int 类型,然后再进行运算。
注意:哪怕是两个 short 相加,结果也是 int。
三、 练习题案例 1:两个 short 相加123short b1 = 10;short b2 = 20;数据类型 result = b1 + b2;
推导过程:根据 ...
C-Notes
未读发表于 C语言
C 语言里这几个最核心的数据类型做个系统梳理。
在看表格之前,有一个非常关键的底层概念:C 语言标准并没有绝对死规定每个类型必须是多少字节,而是规定了一个“大小相对顺序”。在目前主流的 64 位系统环境(如你常用的 GCC 或 Visual Studio 默认配置)下,它们的表现如下:
📊 C 语言核心数据类型一览表
数据类型
关键字
占用字节数 (64位)
典型取值范围
字符型
char
1 字节
-128 到 127
短整型
short
2 字节
-32768 到 32767
整型
int
4 字节
约 ±21 亿
长整型
long
4 或 8 字节
至少与 int 一样大
超长整型
long long
8 字节
约 ±9×10¹⁸
单精度浮点
float
4 字节
约 ±3.4×10³⁸ (6~7位有效数字)
双精度浮点
double
8 字节
约 ±1.7×10³⁰⁸ (15~16位有效数字)
🔍 补充核心细节(防坑指南)1. 为什么隐式转换时 float 比 long long 还要“大”?在第一张笔记里,你看到了 long long ...
发表于 站务
3.0.3更新日志欢迎大家来到网页的3.0版本这个是我第一次正式的来介绍3.0这个版本呢3.0这次更新全新换代 这个我在3.0第一个站点更新中没有详细提到的版本图片(来源-必应今日精选:2026年5月18日[世界博物馆日])
1. 内核换代本站内核已经升级到了 8.1.1 node版本 26.1.0
更新了通过NardoFox LAB.魔改过的安知鱼主题
2. 页面重绘更新重置了很多页面 包括但不限于 个人页面与 网页更新页面 等
3. 服务商换新我们更换了服务器的提供商 目前网页在国内的浏览理论上应该会更快 更换了图床的提供商为去不图床更加稳定 且安全
4. BUG修复&日常维护&更新内容
修复了页面在浏览过程中的浅色模式 部分内容文字显示为白色与背景颜色融为一体无法阅读的BUG
修复了网页更新页面的目录功能在桌面端阅读经常消失开关的问题
修复了个人页面部分图片无法显示的问题
更新的部分文章的阅读部分 使阅读文章更加沉浸
修复了评论功能
修改了部分文章的内容
更新了一些文章
C-Notes
未读发表于 C语言
一、 基础算术运算符与操作对象在C语言中,基础计算依赖于五大算术运算符:加(+)、减(-)、乘(*)、除(/)、取余(%)。
计算载体:既可以直接使用”数字’’进行计算,也可以将数字赋值给变量后再进行计算。
浮点数细节:对于小数(double 类型),在打印时可以使用 %.Nlf 来控制保留N位小数。
示例:
1234567891011121314// 直接用数字进行计算printf("%d\n", 3 + 2);printf("%d\n", 3 - 2);printf("%d\n", 3 * 2);printf("%.2lf\n", 1.3 + 1.23);printf("%.2lf\n", 1.3 - 1.23);printf("%.2lf\n", 1.3 * 1.23);printf("%d\n", 10 / 2);// 使用变量进行计算int a=20;int b=10;printf("%d\n", a + b);p ...
C-Notes
未读发表于 C语言
类型
关键字
占位符
占用内存
有效数字位数(精度)
相当于生活中的…
单精度浮点型
float
%f
4 字节
6 ~ 7 位
普通的家用计算器
双精度浮点型
double
%lf
8 字节
15 ~ 16 位
科学实验室的精密仪器
💡 怎么理解“有效数字位数”?
这里的位数是从左边第一个不是 0 的数字开始算起的总位数,而不是单指小数点后面的位数。
举个例子:假设我们要存圆周率 π。
如果用 float a = 3.1415926535;,因为 float 只能管好前 7 位数字,打印出来可能变成 3.141592(后面的数字就失真、变成乱码了)。
如果用 double b = 3.1415926535;,它能管好前 15 位数字,打印出来就是非常精确的 3.1415926535。
🎯 日常是不是可以直接用 float(%f)?答案是:平时练习完全可以!但有两个“潜规则”需要注意:
1. 为什么总是记不住 %lf?在 C 语言的 printf(打印输出) 中,由于标准的规定,float 类型的参数在传递给 printf 时会自动转换成 double ...
发表于 C语言
一、再次补充–核心基础语法对照表
常用数据类型
关键字
scanf/printf 占位符
占用内存(典型值)
适用场景
整型
int
%d
4 字节
年龄、数量、整数计算
单精度浮点型
float
%f
4 字节
身高、体重、带小数的计算
双精度浮点型
double
%lf
8 字节
高精度科学计算
字符型
char
%c
1 字节
单个英文字母、符号
字符串(字符数组)
char[]
%s
取决于定义的数组大小
姓名、地址、连续文本
二、 scanf 键盘录入三大黄金法则(重点考点)法则 1:除了 %s,其余核心变量必须加取地址符 &
原理:scanf 需要知道变量在内存中的具体地址,才能把键盘输入的值填进去。
数组特例:字符串数组名(如 name)本身就代表了该数组的首地址,因此不要加 &。
123456789char name[20];int age;float height;// ❌ 错误写法:name 加了 & 会引发隐患;age 和 height 漏了 & 会导致程序直接崩溃scanf(" ...




























