C语言二周目速通手册

0. 速通计划

  1. 基本语法

    • 变量声明和定义
    • 数据类型 (整数、浮点数、字符等)
    • 控制流语句 (if、else、switch)
    • 循环语句 (for、while)
  2. 指针和引用

    • 熟练使用指针操作,包括指针算术和指针的数组和函数
    • 了解引用和指针的区别,以及何时使用它们
  3. 函数

  4. 常用数据结构

    • 学习常用容器,如vector、list、map
    • 迭代器的使用
  5. 面向对象编程 (OOP)

    • 类和对象
    • 封装、继承、多态的概念
  6. 异常处理

    • try、catch、throw的使用
  7. 文件操作

    • 文件的读取和写入
  8. 内存管理

    • new 和 delete 操作符的使用

    • 智能指针的基础概念

  9. 模板编程

    • 函数模板和类模板的定义和使用
  10. 多线程编程

    • 基础的线程创建和同步

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
      2
      int x = 5;  // x是一个值类型变量,存储整数值 5
      int y = x; // y得到了x的值的拷贝
  • 引用类型(Reference Types):
    引用类型是对已存在变量的引用,相当于该变量的别名。引用在声明时必须初始化,且不能更改引用的目标。传递方式: 当引用类型传递给函数或赋值给其他引用时,实际上操作的是同一块内存,没有发生值的复制。存储: 引用类型的变量存储的是变量的地址,实际数据通常存储在堆上。

    1
    2
    int a = 10;     // a是一个值类型变量
    int& refA = a; // refA是对a的引用,相当于a的别名

C++ 与 C# 的区别:

1. 指针的存在:

  • C++ 中引入了指针,可以直接操作内存地址,使得引用类型与指针有更直接的关系。
  • C# 中不存在显式指针的概念,引用类型通常与类、接口等高级结构相关。

2. 传统数组的区别:

  • C++ 的数组是值类型,传递给函数时会发生值的复制。
  • C# 的数组是引用类型,传递给函数时实际上是传递的引用。

3. 内存管理:

  • C++ 中需要手动管理内存,使用 newdelete 操作符,包括指针和动态分配内存。
  • 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 位运算异或操作。