02 · 变量与数据类型
- 会声明并使用变量
- 分清 int、char、float 的用途
- 知道类型决定「占多大、能装什么」
变量 = 有名字的盒子
程序要处理数据,就得先有地方存。变量就是带名字的盒子。声明时要说明类型,类型回答两个问题:
- 占多大空间:int 常见 4 字节,char 1 字节……
- 怎么解释里面的比特:同样是 0100…,当 int 读是整数,当 float 读是小数
所以「先声明类型,再赋值」不是语法洁癖,而是让编译器知道该分配多少字节、该用哪套算术规则。
#include <stdio.h>
int main(void)
{
int age = 18; // 整数:年龄、个数
float score = 92.5f; // 小数:分数(f 表示单精度字面量)
char grade = 'A'; // 单个字符,用单引号
printf("年龄=%d\n", age); /* %d 对应 int */
printf("分数=%.1f\n", score); /* %.1f 保留 1 位小数 */
printf("等级=%c\n", grade); /* %c 对应 char */
return 0;
}
常用类型一览
| 类型 | 放什么 | 例子 | printf 占位符 |
|---|---|---|---|
int | 整数 | 42、-7 | %d |
float | 单精度小数 | 3.14f | %f |
double | 更精确的小数 | 3.14159 | %lf 或 %f |
char | 一个字符 | 'A'、'0' | %c |
'A' 是 char(一个字符)。
"A" 是字符串(一串字符,后面细讲)。
不能混用:char c = "A"; 类型不对。占位符必须和类型对齐,这是初学最常见的「打印出乱码/怪数」原因:用 %d 打 float、用 %f 打 int,都是未定义行为,结果不可信。
命名规则(必须记)
- 只能用字母、数字、下划线
- 不能以数字开头(
2name非法,name2合法) - 不能用关键字(如
int、for) - 建议起有意义的名字:
score、max_value
好名字能省掉注释。x 在算法题里可以,在业务代码里三个月后就是谜语。
赋值与修改
赋值 = 是「算出右边,存进左边」。左边必须是可写的盒子(变量),不能写 18 = age;。
n = n + 5 读作:取出 n 的旧值,加 5,再写回 n。它不是数学等式,而是「更新」。
#include <stdio.h>
int main(void)
{
int n = 10;
printf("%d\n", n); // 10
n = 20; // 再次赋值,旧值被覆盖
n = n + 5; // 用旧值算完再存回去
printf("%d\n", n); // 25
return 0;
}
未初始化就很危险
局部变量若不赋值就使用,内容是不确定的垃圾值。养成习惯:定义时就初始化。
int a; /* 危险:不知道里面是多少 */
int b = 0; /* 安全:明确从 0 开始 */
int c, d = 1; /* c 未初始化,d 是 1 —— 容易看漏 */
sizeof:看类型占几字节
不同环境里 int 可能是 2 或 4 字节。不确定时就问 sizeof:
#include <stdio.h>
int main(void)
{
printf("char=%zu int=%zu float=%zu\n",
sizeof(char), sizeof(int), sizeof(float));
return 0;
}
类型决定能装什么
| 类型 | 大约范围 | 适合存 |
|---|---|---|
char | -128~127 | 单个字符、很小的整数 |
int | 数十亿(4字节时) | 年龄、个数、下标 |
float | 约 6~7 位有效数字 | 一般小数 |
double | 约 15 位有效数字 | 更精确的计算 |
1.75f(带 f),更明确。
把大数硬塞进 char 会溢出,结果变得很怪。单片机场景 · 变量与常量:计数器
计数、温度和按键状态都是变量。使用前赋初值,并根据范围选择类型。
边界与验证:执行后 cnt = 1,sum = 1。0~255 以 8 位 unsigned char 为前提;实际范围可查看 limits.h 中的 UCHAR_MAX。
unsigned char cnt = 0;
int sum = 0;
cnt = cnt + 1;
sum = sum + cnt;
本课过关
必做下面哪个是合法的变量名?
逐项排除:2nd 以数字开头,编译器会当成数字字面量而不是标识符;int 是关键字,已被语言占用;my name 中间有空格,会被拆成两个 token。只有 user_name 由字母、下划线、数字组成,且以字母开头,合法。记住三条:不能数字开头、不能用关键字、不能有空格/特殊符号(下划线除外)。
- 声明姓名首字母(char)、年龄(int)、身高(float),并打印出来。
- 把 age 从 18 改成 19,写出两行赋值代码。
- 解释 int 和 float 分别适合存什么。
先自己写完,再点开看解答
1:综合声明与打印
#include <stdio.h>
int main(void)
{
char first = 'X';
int age = 18;
float height = 1.75f;
printf("首字母 %c\n", first);
printf("年龄 %d\n", age);
printf("身高 %.2f\n", height); /* %.2f 保留两位 */
return 0;
}2:赋值 age = 18; age = 19; 或直接 int age = 19;。
3:怎么选类型:整数、个数、下标、开关用 int;带小数的测量值(身高、温度)用 float/double;单个字符用 char。钱在工程里常存「分」(整数),避免浮点误差累加。
下一课:常量与宏,把「固定不变的数」写得更清楚。