C 语言第 2 讲:数据类型与变量
本文为 C 语言入门系列第 2 讲,内容清晰、重点突出、代码可直接运行,适合零基础稳步学习。
📑 文章目录
- 数据类型介绍
- signed 和 unsigned 有符号 / 无符号
- 数据类型的取值范围
- 变量(定义、分类、存储)
- 算术操作符:+ - * / %
- 赋值操作符:= 与复合赋值
- 单目操作符:++ -- + -
- 强制类型转换
- scanf 和 printf 详解
1. 数据类型介绍
C 语言用数据类型描述不同的数据,分为内置类型和自定义类型。
1.1 字符型
char // 字符型 signed char // 有符号字符 unsigned char // 无符号字符1.2 整型
short // 短整型 int // 整型 long // 长整型 long long // 更长整型(C99)1.3 浮点型
float // 单精度浮点 double // 双精度浮点 long double // 长双精度1.4 布尔类型(C99)
专门表示真 / 假,需包含头文件<stdbool.h>。
_Bool flag = true; bool a = false;true= 1false= 0
1.5 数据类型长度(sizeof)
sizeof用来计算类型 / 变量所占字节数,表达式不参与真实运算。
#include <stdio.h> int main() { printf("%zd\n", sizeof(char)); printf("%zd\n", sizeof(short)); printf("%zd\n", sizeof(int)); printf("%zd\n", sizeof(long)); printf("%zd\n", sizeof(long long)); printf("%zd\n", sizeof(float)); printf("%zd\n", sizeof(double)); return 0; }✅ 重点:sizeof 内部表达式不执行
short s = 2; int b = 10; printf("%d\n", sizeof(s = b + 1)); // 计算大小,但 s 不会真的变成 11 printf("s=%d\n", s); // s 仍然是 22. signed 和 unsigned
signed:带正负号unsigned:不带正负号,只能存 0 和正数
signed int a; // 等价 int a unsigned int b; // 无符号整型范围对比(16 位)
signed short:-32768 ~ 32767unsigned short:0 ~ 65535
char 特殊
char默认是否有符号由系统决定,不等同于signed char。
3. 数据类型的取值范围
查看范围包含头文件:
- 整数:
<limits.h> - 浮点数:
<float.h>
常用极值:
INT_MIN // int 最小值 INT_MAX // int 最大值 CHAR_MIN CHAR_MAX4. 变量
4.1 变量定义
int age = 18; char ch = 'a'; double pi = 3.14;4.2 变量分类
- 全局变量:大括号外,整个工程可用,存放在静态区
- 局部变量:大括号内,仅局部可用,存放在栈区
✅ 重点:同名时局部变量优先
int n = 1000; int main() { int n = 10; printf("%d", n); // 输出 10 return 0; }5. 算术操作符 + - * / %
5.1 加减乘除
int a = 10 + 20; int b = 10 - 5; int c = 2 * 3;5.2 除法 /
- 整数相除 =整除(只留整数部分)
- 想要小数,至少一个操作数为浮点数
printf("%d\n", 6 / 4); // 1 printf("%f\n", 6.0 / 4); // 1.5000005.3 取模 %
只能用于整数,结果符号由第一个数决定。
11 % 5 = 1 -11 % 5 = -1 11 % -5 = 16. 赋值操作符 = 与复合赋值
6.1 基本赋值
int a = 10; a = 20;6.2 连续赋值(不推荐)
c = b = a + 3;6.3 复合赋值符
a += 3; // a = a+3 a -= 2; // a = a-2 a *= 2; a /= 2; a %= 2;7. 单目操作符 ++ -- + -
7.1 前置 ++ /--
先 + 1,再使用
int a = 10; int b = ++a; // a=11 b=117.2 后置 ++ /--
先使用,后 + 1
int a = 10; int b = a++; // a=11 b=107.3 正负号 + -
int a = -10; int b = +a; int c = -a;8. 强制类型转换
语法:(类型)值强行把一种类型转为另一种。
int a = (int)3.14; // a=3⚠️ 尽量少用,不到万不得已不使用。
9. scanf 和 printf 详解
9.1 printf 格式化输出
9.1.1 基本用法
printf("Hello World\n");9.1.2 常用占位符
%dint%cchar%ffloat/double%s字符串%lfdouble%zdsize_t(sizeof 返回类型)
9.1.3 格式控制
- 宽度:
%5d - 左对齐:
%-5d - 显示正负:
%+d - 保留小数:
%.2f - 截取字符串:
%.5s
printf("%6.2f\n", 0.5); // " 0.50" printf("%.5s\n", "hello world"); // "hello"9.2 scanf 键盘输入
9.2.1 基本用法
int a; scanf("%d", &a); // 必须加 &9.2.2 多变量输入
scanf("%d%d%f", &a, &b, &f);9.2.3 scanf 返回值
返回成功读取的变量个数,读取失败返回EOF(-1)。
int r = scanf("%d%d", &a, &b); printf("成功读取 %d 个数据\n", r);9.2.4 赋值忽略符*
跳过不需要的字符:
scanf("%d%*c%d%*c%d", &year, &month, &day); // 支持 2025-05-06 或 2025/05/06如果这篇文章对你有帮助,欢迎点赞、收藏、关注,后续会持续更新 C 语言干货~
