Linux 嵌入式 C 学习 Day3|变量、类型转换、全量运算符、IO 输入输出完整笔记
前言
前两日吃透 Linux 操作、gcc 四步编译、C 语言基础数据类型,今天 Day3 深入程序核心:变量规范、初始化、隐式/强制类型转换、全套运算符、printf/scanf/getchar/putchar 输入输出,覆盖嵌入式 C 最常用的运算与交互逻辑,配套课堂练习题拆解,新手一次性吃透。
一、变量完整知识点
1. 变量底层原理
- 程序运行时,变量在内存中开辟一块对应数据类型大小的存储空间;
- 变量名是内存空间别名,通过变量名读写内存里的数据;
- 程序结束,变量内存自动回收。
2. 变量使用铁律
先定义,后使用;未初始化的变量内存是随机垃圾值,严禁直接使用。
3. 变量命名规范(嵌入式开发标准)
允许字符、数字、下划线,三大限制:
- 不能以数字开头;
- 不能和 C 语言关键字重名;
- 尽量不与库函数(printf、main 等)重名。
两种行业命名风格:
- Linux/GNU 风格(内核、嵌入式常用):下划线分隔
temp_val、max_num - 驼峰命名(上层应用):
TempVal、MaxScore
核心原则:见名知意,可读性优先。
4. 变量定义与初始化
- 定义:数据类型 变量名;
intnum;floatf;charch;bool flag;// 需要引入头文件 #include <stdbool.h>- 初始化:定义时直接赋值
inta=10;floatb=3.14f;- 赋值:定义完成后修改值
inta;a=100;二、表达式与数据类型转换
1. 表达式特性
由常量、变量、运算符组合而成;任何表达式必有值、必有对应类型。
2. 混合运算自动转换(隐式转换)
运算时两边类型不一致,低精度自动转为高精度统一计算,转换优先级从低到高:
char/short → int → unsigned int → long → float → double
特殊规则:
- char、short 参与运算,强制提升为 int;
- float 参与运算,强制提升为 double;
- 浮点精度永远高于整型;无符号高于有符号。
3. 强制类型转换(显式转换)
语法:(目标类型)变量/表达式
inta=10;floatb=(float)a;// int转float风险:高精度转低精度会丢失数据(小数截断、高位直接截取)。
4. 赋值转换规则
- 整型赋值浮点:自动补小数,精度扩展;
- 浮点赋值整型:直接舍弃小数部分;
- 有符号/无符号互相赋值:直接拷贝内存二进制,正负可能翻转;
- 大数据存入小空间:截断低位,极易出现数值异常。
示例坑点:
charch=355;// char仅1字节,截取355二进制低8位,输出为负数printf("ch = %d\n",ch);三、全套运算符详解
1. 算数运算符+ - * / % ++ --
/:整型相除直接舍去小数,仅保留整数;浮点除法保留小数;%取余:只能用于整型,float/double 不能取余;- 自增自减区分:
i++:后置,先使用原值,运算结束后自增 1;++i:前置,先自增 1,再使用新值;
++、--仅能作用于变量,不能写(a+b)++。
课堂练习题:数字拆分求和
定义int num=2389,取出千、百、十、个位并求和打印。
2. 赋值运算符
基础:=;复合赋值:+= -= *= /= %=
- 左值:只能是变量(能放在等号左边,可修改内存);常量、表达式不能做左值;
- 右值:常量、变量、表达式均可。
3. 逗号运算符
语法:表达式1,表达式2,表达式3...
执行顺序:从左至右依次运算,整体结果为最后一个表达式的值。
intres=(1+2,3+4,5+6);// res最终等于114. sizeof 运算符
作用:获取变量/类型占用内存字节数,编译阶段计算,不运行代码。
sizeof(int);floatf;sizeof(f);打印专用格式符:%zu。
5. 运算符优先级(速记)
括号 > 单目运算符 > 双目 > 三目 > 赋值 > 逗号
双目内部优先级:算数 > 移位 > 关系 > 位运算 > 逻辑
四、输入输出函数(stdio.h 必备)
1. 单字符 IO:putchar / getchar
putchar
- 功能:终端输出单个字符;
- 参数:ASCII 数值/字符常量;
- 返回值:打印字符的 ASCII 码(int 类型);
- 限制:一次只能输出一个字符。
putchar('A');putchar(65);getchar
- 功能:从键盘读取一个字符;
- 典型练习:输入小写字母,转大写输出
原理:小写 a-z 比大写 A-Z ASCII 大 32,ch-32即可转换。
2. 格式化:printf / scanf
printf:格式化打印,%d %f %c %s %zu等格式符;scanf:键盘读取数据,变量前必须加&取地址;
区分重点:
printf中%f兼容 float、double;scanf严格区分:float 用%f,double 用%lf。
3. 字符串:puts、gets
puts:输出字符串,自带换行;gets:读取整行字符串(实际开发存在安全漏洞,仅课堂演示)。
五、今日重点作业拆解
题目:定义a=37,b=64,拼接出新数字3476
规则:
- 千位:a 的十位
- 百位:b 的个位
- 十位:a 的个位
- 个位:b 的十位
分步计算
a=37
个位:37%10 = 7
十位:37/10 = 3b=64
个位:64%10 = 4
十位:64/10 = 6- 组合:
3*1000 + 4*100 + 7*10 + 6 = 3476
完整代码示例
#include<stdio.h>intmain(void){inta=37,b=64;inta_shi=a/10;inta_ge=a%10;intb_shi=b/10;intb_ge=b%10;intnew_num=a_shi*1000+b_ge*100+a_ge*10+b_shi;printf("拼接结果:%d\n",new_num);return0;}六、今日学习总结
- 变量必须初始化,命名遵循嵌入式规范,先定义后使用;
- 混合运算自动类型转换,高精度存低精度数据会丢失;
- 自增、取余、逗号、sizeof 是笔试高频运算符,分清前后置 ++ 区别;
- putchar/getchar 轻量化单字符交互,嵌入式底层调试常用;
- 数字拆分依靠
/整除、%取余,是必考题型。
后续学习预告
下一节学习关系运算符、逻辑运算符、if 分支判断语句,正式进入程序逻辑控制。
标签
#嵌入式学习 #C语言Day3 #C语言变量 #C语言运算符 #printf scanf #Linux C 开发