C语言二周目速通手册
0. 速通计划
基本语法
- 变量声明和定义
- 数据类型 (整数、浮点数、字符等)
- 控制流语句 (if、else、switch)
- 循环语句 (for、while)
指针和引用
- 熟练使用指针操作,包括指针算术和指针的数组和函数
- 了解引用和指针的区别,以及何时使用它们
函数
常用数据结构
- 学习常用容器,如vector、list、map
- 迭代器的使用
面向对象编程 (OOP)
- 类和对象
- 封装、继承、多态的概念
异常处理
- try、catch、throw的使用
文件操作
- 文件的读取和写入
内存管理
new 和 delete 操作符的使用
智能指针的基础概念
模板编程
- 函数模板和类模板的定义和使用
多线程编程
- 基础的线程创建和同步
1. 基本语法
1.1 数据类型
1.1.1 数据类型一览表
分类 | 名称 | 功能 | 大小 | 声明方式 | 默认值 | 值类型/引用类型 |
---|---|---|---|---|---|---|
整数类型 | int | 表示整数值 | 32位(4字节) | int variable; | 未初始化的值不确定 | 值 |
整数类型 | short | 表示较小范围的整数 | 16位(2字节) | short variable; | 未初始化的值不确定 | 值 |
整数类型 | long | 表示较大范围的整数 | 32位或64位 | long variable; | 未初始化的值不确定 | 值 |
整数类型 | long long | 表示更大范围的整数 | 64位(8字节) | long long variable; | 未初始化的值不确定 | 值 |
浮点数类型 | float | 表示单精度浮点数 | 32位(4字节) | float variable; | 0.0 | 值 |
浮点数类型 | double | 表示双精度浮点数 | 64位 | double variable; | 0.0 | 值 |
浮点数类型 | long double | 表示更高精度的浮点数 | 取决于编译器和系统 | long double variable; | 0.0 | 值 |
字符类型 | char | 表示单个字符 | 8位(1字节) | char character; | 未初始化的值不确定 | 值 |
字符类型 | bool | 表示布尔值,只有两个可能的值:true 或 false | 1字节 | bool flag; | false | 值 |
数组类型 | Array | 存储相同类型的多个元素 | 取决于数组元素个数和类型 | type arrayName[size]; | 元素的默认值取决于数据类型 | 值 |
字符串类型 | String | 表示文本数据,实际上是字符数组的一种封装 | 取决于字符串长度 | std::string str = “Hello, World!”; | 空字符串 “” | 值 |
枚举类型 | Enum | 用户定义的枚举类型,为一组命名的整数值提供有意义的名称 | 取决于枚举的大小 | enum EnumName { value1, value2, … }; | 0(第一个值) | 值 |
指针类型 | Pointer | 存储变量的内存地址 | 4字节或8字节 | type* pointerName; | 未初始化的值不确定 | 引用 |
1.1.2 值类型与引用类型
值类型(Value Types):
值类型直接包含数据的实际值,变量存储的是数据本身。传递方式:
当将值类型传递给函数或赋值给其他变量时,会发生值的复制,即新的变量会得到原始值的拷贝。存储:
值类型的变量通常直接存储在栈上,而不是在堆上。1
2int x = 5; // x是一个值类型变量,存储整数值 5
int y = x; // y得到了x的值的拷贝
引用类型(Reference Types):
引用类型是对已存在变量的引用,相当于该变量的别名。引用在声明时必须初始化,且不能更改引用的目标。传递方式: 当引用类型传递给函数或赋值给其他引用时,实际上操作的是同一块内存,没有发生值的复制。存储: 引用类型的变量存储的是变量的地址,实际数据通常存储在堆上。1
2int a = 10; // a是一个值类型变量
int& refA = a; // refA是对a的引用,相当于a的别名
C++ 与 C# 的区别:
1. 指针的存在:
- C++ 中引入了指针,可以直接操作内存地址,使得引用类型与指针有更直接的关系。
- C# 中不存在显式指针的概念,引用类型通常与类、接口等高级结构相关。
2. 传统数组的区别:
- C++ 的数组是值类型,传递给函数时会发生值的复制。
- C# 的数组是引用类型,传递给函数时实际上是传递的引用。
3. 内存管理:
- C++ 中需要手动管理内存,使用
new
和delete
操作符,包括指针和动态分配内存。 - C# 中具有垃圾回收机制,自动管理内存,避免了内存泄漏问题。
4. null 的使用:
- 在 C++ 中,null 通常表示空指针,用于表示指针不指向任何有效的内存地址。
- 在 C# 中,null 可以用于引用类型和可空值类型,表示未初始化的引用或值。
尽管 C++ 和 C# 在值类型和引用类型的概念上有一些相似之处,但由于语言设计和用途的不同,它们之间存在一些重要的区别,特别是在内存管理和指针的处理上。
1.2 关键字
1.2.1 关键字一览表
关键字 | 用途 |
---|---|
auto | 用于自动推断变量的类型。 |
break | 用于跳出循环或 switch 语句。 |
case | 在 switch 语句中标签一个分支。 |
char | 表示字符数据类型。 |
const | 用于定义常量或修饰变量,表示其值不可修改。 |
continue | 用于终止当前循环的迭代,跳到下一次迭代。 |
default | 在 switch 语句中标识默认分支。 |
do | 用于创建 do-while 循环。 |
double | 表示双精度浮点数数据类型。 |
else | 在条件语句中标识一个分支,如果条件不成立执行该分支。 |
enum | 用于定义枚举类型。 |
extern | 用于声明一个全局变量或函数是在其他文件中定义的。 |
false | 表示布尔类型的假值。 |
float | 表示单精度浮点数数据类型。 |
for | 用于创建循环。 |
goto | 用于无条件跳转到程序的指定位置。 |
if | 用于创建条件语句。 |
int | 表示整数数据类型。 |
long | 表示长整数数据类型。 |
namespace | 用于定义命名空间,以组织代码。 |
new | 用于动态分配内存,返回指向新分配的内存的指针。 |
nullptr | 用于表示空指针常量。 |
operator | 用于定义运算符重载。 |
return | 用于从函数中返回值。 |
short | 表示短整数数据类型。 |
signed | 用于声明有符号整数类型。 |
sizeof | 用于返回对象或类型的大小。 |
static | 用于声明静态变量或函数,静态成员在类的所有对象中是共享的。 |
struct | 用于定义结构体。 |
switch | 用于创建 switch 语句。 |
template | 用于实现泛型编程。 |
this | 用于指向当前对象的指针。 |
throw | 用于抛出异常。 |
true | 表示布尔类型的真值。 |
try | 用于捕获异常。 |
typedef | 用于定义类型别名。 |
typeid | 用于获取表达式的类型信息。 |
typename | 用于指定模板参数中的类型。 |
union | 用于定义联合体。 |
unsigned | 用于声明无符号整数类型。 |
using | 用于引入命名空间或声明别名。 |
virtual | 用于声明虚函数或实现多态。 |
void | 表示无返回值或无参数的函数。 |
volatile | 用于声明一个变量可能被某些未被编译器检测到的因素更改,例如硬件中断。 |
while | 用于创建循环。 |
xor | 位运算异或操作。 |