一、基本数据类型
C 语言提供了丰富的基本数据类型,用于存储不同类型的数据,主要包括整数类型、浮点类型和布尔类型。
1. 整数类型
整数类型用于存储整数,根据是否带符号以及占用存储空间的不同,可进一步细分:
| 类型名 | 占用存储空间 | 数值范围 |
|---|---|---|
| char | 1 字节 | -128 到 127 或者 0 到 255 |
| unsigned char | 1 字节 | 0 到 255 |
| signed char | 1 字节 | -128 到 127 |
| short | 至少 2 字节 | -32,768 到 32,767 |
| unsigned short | 至少 2 字节 | 0 到 65,535 |
| int | 至少 2 字节 | 通常与机器字长一致 |
| unsigned int | 至少 2 字节 | 0 到 4,294,967,295(32 位系统) |
| long | 至少 4 字节 | -2,147,483,648 到 2,147,483,647 |
| unsigned long | 至少 4 字节 | 0 到 4,294,967,295 |
| long long | 至少 8 字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long long | 至少 8 字节 | 0 到 18,446,744,073,709,551,615 |
2. 浮点类型
浮点类型用于存储带小数点的数值,有单精度和双精度之分:
| 类型名 | 占用存储空间 | 精度 | 数值范围 |
|---|---|---|---|
| float | 4 字节 | 约 6-7 位有效数字 | ±1.2E-38 到 ±3.4E+38 |
| double | 8 字节 | 约 15-16 位有效数字 | ±2.2E-308 到 ±1.8E+308 |
| long double | 8 字节或更多 | 至少和 double 一样高 | 取决于具体实现 |
3. 布尔类型
C 语言原本没有专门的布尔类型,不过在 C99 标准中引入了_Bool类型,并且可以通过包含stdbool.h头文件使用bool别名:
| 类型名 | 占用存储空间 | 取值 |
|---|---|---|
| _Bool | 1 字节 | 0(假)或 1(真) |
| bool | 1 字节 | false 或 true |
二、各种变量的格式占位符
在使用printf、scanf等函数时,需要使用格式占位符来指定数据的输出和输入格式。
1. 常用的格式占位符
- int:%d
- double:%lf
- float:%f
- long long:%lld
2. 整数占位符
整数占位符用于处理不同类型的整数数据:
| 占位符 | 对应数据类型 | 说明 |
|---|---|---|
| %d | int | 以十进制形式输出有符号整数 |
| %i | int | 与 % d 相同,也用于输出十进制整数 |
| %u | unsigned int | 以十进制形式输出无符号整数 |
| %o | unsigned int | 以八进制形式输出无符号整数 |
| %x | unsigned int | 以十六进制形式输出无符号整数(小写字母) |
| %X | unsigned int | 以十六进制形式输出无符号整数(大写字母) |
| %ld | long | 以十进制形式输出长整型 |
| %lu | unsigned long | 以十进制形式输出无符号长整型 |
| %lld | long long | 以十进制形式输出长长整型 |
| %llu | unsigned long long | 以十进制形式输出无符号长长整型 |
3. 浮点占位符
浮点占位符用于处理浮点数数据:
| 占位符 | 对应数据类型 | 说明 |
|---|---|---|
| %f | float/double | 以十进制小数形式输出(默认 6 位小数) |
| %e | float/double | 以科学计数法形式输出(小写 e) |
| %E | float/double | 以科学计数法形式输出(大写 E) |
| %g | float/double | 自动选择 % f 或 % e 中更简洁的形式输出 |
| %G | float/double | 自动选择 % f 或 % E 中更简洁的形式输出 |
4. 字符与字符串占位符
字符与字符串占位符用于处理字符和字符串数据:
| 占位符 | 对应数据类型 | 说明 |
|---|---|---|
| %c | char | 输出单个字符 |
| %s | char* | 输出字符串,直到遇到 \0 结束 |
| %p | void* | 输出指针地址(以十六进制形式) |
5. 其他占位符
其他占位符用于特殊需求:
| 占位符 | 对应数据类型 | 说明 |
|---|---|---|
| %% | 无 | 输出百分号 % 本身 |
| %n | int* | 将已输出的字符数存储到指定的整型指针中 |
6. 格式控制选项
在 % 和占位符之间,还可以使用一些修饰符来更精确地控制输出格式:
- 宽度控制:例如
%5d表示输出宽度为 5 的整数,不足部分用空格填充。 - 精度控制:例如
%.2f表示输出保留两位小数的浮点数。 - 对齐方式:例如
%-10s表示左对齐输出宽度为 10 的字符串。 - 符号控制:例如
%+d表示输出带符号的整数,正数也会显示 + 号。 - 填充字符:例如
%05d表示用 0 填充宽度不足的部分,如输出 00042。
7. 注意事项
- 在使用
scanf读取字符串时,%s会在遇到空格、制表符或换行符时停止读取。若要读取包含空格的字符串,可以使用%[^\n]。 - 占位符要和对应变量的类型相匹配,否则可能会导致未定义行为。
%n是一个比较特殊的占位符,使用时需要格外小心,因为它可能会引发安全漏洞。- 对于
long long类型,在 Windows 系统的某些编译器中可能需要使用%I64d。
三、系统函数调用
在 C 语言中,可以使用system("")函数来调用系统命令,该函数需要包含头文件stdlib.h。
1. 常用系统指令
cls:清屏pause:按任意键继续cmd:打开 cmd
2. 其他命令(win 系统命令不区分大小写)
以下是一些常用的 Windows 系统命令:
ASSOC:显示或修改文件扩展名关联ATTRIB:显示或更改文件属性BREAK:设置或清除扩展式 CTRL+C 检查BCDEDIT:设置启动数据库中的属性以控制启动加载CACLS:显示或修改文件的访问控制列表 (ACL)CALL:从另一个批处理程序调用这一个CD:显示当前目录的名称或将其更改CHCP:显示或设置活动代码页数CHDIR:显示当前目录的名称或将其更改CHKDSK:检查磁盘并显示状态报告CHKNTFS:显示或修改启动时间磁盘检查COLOR:设置默认控制台前景和背景颜色COMP:比较两个或两套文件的内容COMPACT:显示或更改 NTFS 分区上文件的压缩CONVERT:将 FAT 卷转换成 NTFS,你不能转换当前驱动器COPY:将至少一个文件复制到另一个位置DATE:显示或设置日期,后面加/t表示显示日期DEL:删除至少一个文件DIR:显示一个目录中的文件和子目录DISKPART:显示或配置磁盘分区属性DOSKEY:编辑命令行、撤回 Windows 命令并创建宏DRIVERQUERY:显示当前设备驱动程序状态和属性ECHO:显示消息,或将命令回显打开或关闭ENDLOCAL:结束批文件中环境更改的本地化ERASE:删除一个或多个文件EXIT:退出 CMD.EXE 程序 (命令解释程序)FC:比较两个文件或两个文件集并显示它们之间的不同FIND:在一个或多个文件中搜索一个文本字符串FINDSTR:在多个文件中搜索字符串FOR:为一组文件中的每个文件运行一个指定的命令FORMAT:格式化磁盘,以便用于 WindowsFSUTIL:显示或配置文件系统属性FTYPE:显示或修改在文件扩展名关联中使用的文件类型GOTO:将 Windows 命令解释程序定向到批处理程序中某个带标签的行GPRESULT:显示计算机或用户的组策略信息GRAFTABL:使 Windows 在图形模式下显示扩展字符集HELP:提供 Windows 命令的帮助信息ICACLS:显示、修改、备份或还原文件和目录的 ACLIF:在批处理程序中执行有条件的处理操作LABEL:创建、更改或删除磁盘的卷标MD:创建一个目录MKDIR:创建一个目录MKLINK:创建符号链接和硬链接MODE:配置系统设备MORE:逐屏显示输出MOVE:将一个或多个文件从一个目录移动到另一个目录OPENFILES:显示远程用户为了文件共享而打开的文件PATH:为可执行文件显示或设置搜索路径PAUSE:暂停批处理文件的处理并显示消息POPD:还原通过 PUSHD 保存的当前目录的上一个值PRINT:打印一个文本文件PROMPT:更改 Windows 命令提示PUSHD:保存当前目录,然后对其进行更改RD:删除目录RECOVER:从损坏的或有缺陷的磁盘中恢复可读信息REM:记录批处理文件或 CONFIG.SYS 中的注释 (批注)REN:重命名文件RENAME:重命名文件REPLACE:替换文件RMDIR:删除目录ROBOCOPY:复制文件和目录树的高级实用工具SET:显示、设置或删除 Windows 环境变量SETLOCAL:开始本地化批处理文件中的环境更改SC:显示或配置服务 (后台进程)SCHTASKS:安排在一台计算机上运行命令和程序SHIFT:调整批处理文件中可替换参数的位置SHUTDOWN:允许通过本地或远程方式正确关闭计算机SORT:对输入排序START:启动单独的窗口以运行指定的程序或命令SUBST:将路径与驱动器号关联SYSTEMINFO:显示计算机的特定属性和配置TASKLIST:显示包括服务在内的所有当前运行的任务TASKKILL:中止或停止正在运行的进程或应用程序TIME:显示或设置系统时间,后面加/t表示显示时间TITLE:设置 CMD.EXE 会话的窗口标题,如TITLE 你想改成啥TREE:以图形方式显示驱动程序或路径的目录结构,如TREE D:TYPE:显示文本文件的内容,如TYPE D:\\文本.txtVER:显示 Windows 的版本VERIFY:告诉 Windows 是否进行验证,以确保文件正确写入磁盘VOL:显示磁盘卷标和序列号XCOPY:复制文件和目录树WMIC:在交互式命令 shell 中显示 WMI 信息
四、运算符优先级
C++ 运算符的优先级决定了表达式中运算符的计算顺序,以下是 C 语言中运算符的优先级列表,按照从高到低的顺序排列,同一行中的运算符具有相同的优先级:
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 优先级 1 | ::(作用域解析) | 从左到右 |
| 优先级 2 | ++、--(后缀) ()(函数调用) [](数组下标) .(成员访问) ->(通过指针的成员访问) | 从左到右 |
| 优先级 3 | ++、--(前缀) +、-(一元) !、~(逻辑非、按位取反) (type)(强制类型转换) *(解引用) &(取地址) sizeof new、delete | 从右到左 |
| 优先级 4 | .、->(成员指针访问) | 从左到右 |
| 优先级 5 | *、/、%(乘、除、取模) | 从左到右 |
| 优先级 6 | +、-(加、减) | 从左到右 |
| 优先级 7 | <<、>>(位左移、位右移) | 从左到右 |
| 优先级 8 | <、<=、>、>=(关系比较) | 从左到右 |
| 优先级 9 | ==、!=(相等性比较) | 从左到右 |
| 优先级 10 | &(按位与) | 从左到右 |
| 优先级 11 | ^(按位异或) | 从左到右 |
| 优先级 12 | `(按位或) | 从左到右 |
| 优先级 13 | &&(逻辑与) | 从左到右 |
| 优先级 14 | ||(逻辑或) | 从左到右 |
| 优先级 15 | ?:(三元条件) | 从右到左 |
| 优先级 16 | =、+=、-=、*=、/=、%= <<=、>>=、&=、^=、`= | 从右到左 |
| 优先级 17 | ,(逗号) | 从左到右 |
注意事项
- 优先级高的运算符先计算,例如
a + b * c中,乘法先计算,因为*的优先级高于+。 - 结合性决定相同优先级运算符的计算顺序,例如赋值运算符是右结合的,因此
a = b = c等价于a = (b = c)。 - 使用括号
()可以强制改变计算顺序,例如(a + b) * c中加法先计算。 - 逻辑运算符
&&和||具有短路特性,即当结果可以提前确定时,不会计算后续表达式。