news 2026/5/7 14:02:31

C 语言第 2 讲:数据类型与变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C 语言第 2 讲:数据类型与变量

本文为 C 语言入门系列第 2 讲,内容清晰、重点突出、代码可直接运行,适合零基础稳步学习。


📑 文章目录

  1. 数据类型介绍
  2. signed 和 unsigned 有符号 / 无符号
  3. 数据类型的取值范围
  4. 变量(定义、分类、存储)
  5. 算术操作符:+ - * / %
  6. 赋值操作符:= 与复合赋值
  7. 单目操作符:++ -- + -
  8. 强制类型转换
  9. 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= 1
  • false= 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 仍然是 2

2. signed 和 unsigned

  • signed:带正负号
  • unsigned:不带正负号,只能存 0 和正数
signed int a; // 等价 int a unsigned int b; // 无符号整型

范围对比(16 位)

  • signed short:-32768 ~ 32767
  • unsigned short:0 ~ 65535

char 特殊

char默认是否有符号由系统决定,不等同于signed char


3. 数据类型的取值范围

查看范围包含头文件:

  • 整数:<limits.h>
  • 浮点数:<float.h>

常用极值:

INT_MIN // int 最小值 INT_MAX // int 最大值 CHAR_MIN CHAR_MAX

4. 变量

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.500000

5.3 取模 %

只能用于整数,结果符号由第一个数决定

11 % 5 = 1 -11 % 5 = -1 11 % -5 = 1

6. 赋值操作符 = 与复合赋值

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=11

7.2 后置 ++ /--

先使用,后 + 1

int a = 10; int b = a++; // a=11 b=10

7.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 语言干货~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 13:57:05

轻松上手BepInEx:游戏插件框架的实用入门指南

轻松上手BepInEx&#xff1a;游戏插件框架的实用入门指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想要为Unity游戏添加自定义功能却不知从何下手&#xff1f;BepInEx游戏插…

作者头像 李华
网站建设 2026/5/7 13:56:03

别把 QLoRA 当成 LoRA 的自动升级:我在 RTX 3090 上把同一个 0.6B 模型按全参、LoRA、QLoRA 跑了一遍,真正省掉的是这两层内存

别把 QLoRA 当成 LoRA 的自动升级:我在 RTX 3090 上把同一个 0.6B 模型按全参、LoRA、QLoRA 跑了一遍,真正省掉的是这两层内存 很多人第一次做大模型微调,会把 LoRA 和 QLoRA 理解成一条顺滑升级链:先学 LoRA,不够省显存时再“切到 4bit 的 LoRA”。可一到项目里,问题马…

作者头像 李华