一、基础结构
知识点 | 核心内容 | 关键示例代码片段 |
---|---|---|
程序入口 | 所有程序从main() 函数开始执行,return 0 表示正常结束(非0为异常) | int main() { return 0; } |
输入输出 | cout 输出(<< 运算符),cin 输入(>> 运算符);endl 换行刷新 | cout << "年龄:" << age; cin >> age; |
预处理指令 | #include 引入头文件(标准库用<> ,自定义用"" );#define 定义宏 | #include "myfile.h"; #define PI 3.14 |
命名空间 | std 是标准库命名空间,using namespace std; 可省略前缀,也可直接用std:: | std::cout << "Hi"; (不省略前缀) |
二、数据存储
知识点 | 核心内容 | 关键示例代码片段 |
---|---|---|
基本数据类型 | 整数(int (4字节)、short (2字节)、long (4/8字节));浮点(float (4字节,加f 后缀)、double (8字节));char (1字节,单引号包裹);bool (1字节,true /false ) | float f = 3.14f; char c = 'A'; |
变量声明与初始化 | 先声明后使用,可声明时初始化(推荐) | int a; a = 5; (分步);int b = 10; (直接) |
变量命名规则 | 字母/数字/下划线组成,不能以数字开头,区分大小写,禁用关键字 | int studentCount = 100; (合法) |
数组 | 静态数组:类型 名[长度] = {元素} (长度为常量,未初始化元素默认为0);动态数组:类型* 名 = new 类型[长度] ,必须用delete[] 释放 | int arr[] = {1,2,3}; int* p = new int[5]; delete[] p; |
string类 | 标准库字符串类,支持拼接(+ )、赋值(= )、比较(== /!= /< 等)、长度(size() /length() )、子串(substr(起始索引, 长度) ) | string s = "Hello"; s += " World"; s.substr(2, 3); |
const修饰符 | 修饰变量:const 类型 名 = 值 (不可修改);修饰指针:const 类型* p (指向常量,值不可改)、类型* const p (指针常量,指向不可改) | const int MAX = 100; const int* p1; int* const p2 = &a; |
三、逻辑控制
知识点 | 核心内容 | 关键示例代码片段 |
---|---|---|
算术运算符 | +、-、*、/、% (整数除法取整,%取余) | int rem = 10 % 3; (结果1) |
复合赋值运算符 | +=、-=、*=、/= ,简化赋值操作 | x += 3; (等价于x = x + 3) |
比较与逻辑运算符 | 比较(>、<、==、!=);逻辑(&&与、 | |
运算符优先级 | 算术>比较>逻辑>赋值;不确定时加() | (a + b) * c; (确保先加后乘) |
自增自减 | ++i (先加后用)、i++ (先用后加);-- 同理 | int b = ++a; (a先+1,再赋值给b) |
条件表达式 | 三目运算符:条件 ? 表达式1 : 表达式2 (条件为真返回表达式1,否则返回2) | int max = (a > b) ? a : b; |
if-else条件语句 | 多分支用else if ,根据条件执行不同代码块 | if (score >= 90) { ... } else if (score >= 60) { ... } |
switch语句 | 多分支判断,case 后接常量,break 跳出分支,default 处理默认情况 | switch(grade) { case 'A': ... break; default: ... } |
for循环 | 适合已知循环次数,格式:for(初始化; 条件; 更新) | for (int i = 0; i < 5; i++) { ... } |
while/do-while循环 | while先判断后执行,do-while至少执行一次 | while (num > 0) { ... } |
循环控制 | break 跳出当前循环;continue 跳过本次循环剩余代码,进入下一次循环 | for(...) { if(i==3) break; } |
变量作用域 | 全局变量(函数外,全程有效)、局部变量(函数内)、块变量(代码块内);块内变量屏蔽外部同名变量 | int a=1; { int a=2; cout << a; } (输出2) |
四、核心特性
知识点 | 核心内容 | 关键示例代码片段 |
---|---|---|
函数定义 | 格式:返回类型 名(参数列表) { 函数体; return 返回值; } ;无返回值用void | void print(int x) { cout << x; } |
函数声明 | 可在调用前声明(原型),定义可在后;声明需与定义参数、返回类型一致 | int add(int a, int b); (声明) |
函数重载 | 同名函数,参数类型/个数/顺序不同,返回值不同不可作为重载依据 | int add(int a, int b); double add(double a, double b); |
函数默认参数 | 从右往左连续指定默认值,调用时可省略带默认值的参数 | int multiply(int a, int b = 2); |
类与对象 | class 定义类,private (私有)、public (公有)控制访问权限;构造函数初始化对象 | class Person { public: Person(string n) { ... } }; |
对象创建与使用 | 栈对象:类名 对象名(参数) ;通过对象名.成员 访问 | Person p("Tom", 18); p.introduce(); |
指针 | 存储变量地址,& 取地址,* 解引用操作;数组名是首元素地址,指针可遍历数组 | int* p = # *p = 20; int arr[3]={1,2,3}; int* p=arr; cout << *(p+1); (输出2) |
引用 | 变量别名,定义时必须初始化,绑定后不可修改;引用传参可修改实参 | int& ref = a; ref = 10; void swap(int& a, int& b) { ... } |
五、实用细节与常见问题
知识点 | 核心内容 | 关键提示/示例 |
---|---|---|
动态内存释放 | 动态数组用delete[] 释放,避免内存泄漏 | delete[] dynArr; |
数组边界 | C++不检查数组边界,需手动控制索引范围,避免越界访问 | 索引最大为“数组长度-1” |
字符串处理 | C风格字符串以'\0' 结尾,需用<cstring> 库函数;优先使用string类 | 避免C风格字符串的内存管理问题 |
常见语法错误 | 漏写; 、括号不匹配、变量未声明、类型不匹配 | 编码后逐行检查基础语法规范 |
常见逻辑错误 | 数组越界、循环条件错误导致死循环、自增自减使用不当 | 调试时关注循环变量和数组索引变化 |
常见内存问题 | 动态内存忘记释放(内存泄漏)、释放后继续使用(野指针) | 申请动态内存后及时配对释放,避免重复释放 |
THE END