一、基本数据类型
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:\\文本.txt
VER
:显示 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
中加法先计算。 - 逻辑运算符
&&
和||
具有短路特性,即当结果可以提前确定时,不会计算后续表达式。