当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/770575/

相关文章:

  • 离开那些 996 无效加班的公司,提升自己的能力,找到不加班效率高的公司
  • 深度解析:5大核心技术揭秘开源媒体播放器MPC-BE的高性能实现
  • Mi-Create终极指南:免费可视化工具,零基础设计小米手表个性表盘
  • D2RML:暗黑破坏神2重制版多账户并行启动技术指南
  • 5个关键技巧掌握Arduino CLI:从零开始构建你的硬件开发工作流
  • 如何3步配置BepInEx游戏插件框架:完整实践指南
  • OpenRGB:如何用一个免费开源工具终结RGB灯光控制混乱?终极统一解决方案来了!
  • Newtonsoft.Json-for-Unity终极指南:如何在Unity中快速处理JSON数据
  • 别再死记硬背公式了!手把手带你用Matlab画出Buck/Boost电路的M-D关系图
  • Cortex-R82处理器AArch64寄存器架构与RAS机制解析
  • FastReport .Net脚本进阶:除了求和,还能这样玩转报表动态计算与布局
  • WSA-Pacman:三步搞定Windows安卓应用安装,告别命令行烦恼
  • 别再只会用DAQ助手了!手把手教你用LabVIEW DAQmx函数搭建高性能数据采集系统
  • Claude桌面应用增强指南:主题与插件系统架构解析与实战
  • 基于Whisper.cpp与GPT-4的AI面试助手Cheetah:本地化实时反馈系统搭建指南
  • 创业团队如何利用 Taotoken 统一管理多模型 API 调用与成本
  • 使用HermesAgent工具连接Taotoken实现自动化任务处理与信息汇总
  • PyCharm 大数据开发快速上手指南(类比 VSCode 、Oracle SQL Developer)
  • QobuzDownloaderX-MOD:3步完成高品质无损音乐下载的终极指南
  • 为 OpenClaw Agent 工作流配置 Taotoken 作为后端推理引擎
  • PHP魔术方法实战避坑:用MRCTF2020 Ezpop案例讲清楚__invoke和__get的冷门用法
  • 保姆级教程:用MATLAB仿真GMSK信号(附完整代码与眼图分析)
  • 旧手机玩转Xposed:保姆级ADB Shell离线安装指南,覆盖Android 6/7/8
  • Skillshare:统一管理AI编程助手技能,实现一处编写处处可用
  • 从电赛项目到物联网应用:基于STM32和LoRa模块的数据采集与阿里云上传实战
  • 从‘Hello World’到小型项目:手把手教你用CMake 3.28管理C++工程(附完整配置流程)
  • AlphaAvatar:构建全能型AI数字管家的插件化架构与实战部署指南
  • 30秒找回QQ号:手机号查询工具的三大核心优势
  • GSYVideoPlayer:如何构建Android平台最灵活的多引擎视频播放器解决方案
  • Acode:Android移动端开发者的全功能代码编辑器解决方案