惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Troy Hunt's Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
T
Tenable Blog
L
LINUX DO - 热门话题
V
Visual Studio Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
SecWiki News
SecWiki News
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
W
WeLiveSecurity
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
S
Securelist
Spread Privacy
Spread Privacy
L
LangChain Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Last Watchdog
The Last Watchdog
Attack and Defense Labs
Attack and Defense Labs
博客园 - 司徒正美
Help Net Security
Help Net Security
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
Forbes - Security
Forbes - Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
博客园 - 【当耐特】
T
Tor Project blog

博客园 - ace--碳水化合物

English1 Tidio 官方帮助中心 ERP 相关系统介绍 蝉翼定理 选配法 利润最大化公式 写在失业的一段话 排列组合-组合 在线简历 概率论与数理统计学习章节 绝对值 比例五大定理 算术平均值与几何平均值 等价符号 公因数与最大公因数 容斥原理 英语2026 机器学习,深度学习,强化学习 分别是什么以及区别是什么 深度学习 监督学习 FAQ IVR TTS选择 k 近邻算法 kaldi 平稳核函数(stationary kernel) Karush-Kuhn-Tucker 条件 凸二次规划(convex quadratic programming) FunASR+FreeSwitch做坐席客服系统记录 freeswitch原理图 客服系统,第三方平台,对话转录音,这些可以不依赖第三方做么 STUN服务器 Gun.js原理 游戏升级记 10 OBB 边界问题 关于yolo26是否可以通过结合java开发 opencv和yolo是一回事情吗 pytorch TorchVision - ace--碳水化合物 PyTorch 和 FashionMNIST 的关系 java record 游戏升级记 9 VibeVoice实现90分钟、多角色播客生成,拓展语音合成新边界 同 WiFi 下用 Claude Code 控制另一台 Windows 电脑 Numpy 1 游戏升级记 8 开源claudecode前端 github star 9k+ 向量数据库skill 游戏升级记 7 游戏升级记 6 关系型数据库,向量数据库,ES,缓存,列式数据库,时序数据库,图数据库等的区别和共同点列举table 多Agent可视化 Agent设计模式 中文 Hermes+Obsidian+LLM wkii,构建AI知识库 Claude Code 前端工程泄露代码开源 游戏升级记 5 ai记忆 Rag 1 游戏升级记 4 游戏升级记 3 游戏升级记 2 AI学习路线 关于hermes agent安装 1 游戏升级记 1 代码迷踪 十三 代码迷踪 十二 ai智能体工程 Rust vs Go 微信小程序实名认证 怎样制作一个街机游戏 跟Claude code说 深入思考 它会思考更深入. googlebusiness profile设置统一白名单的操作,要弹窗模式的 该怎样利用ollama自己训练一个编程大模型 中华AI智能体编程一站式基站构想 打包网站到exe和app 识别的内容一般是试题模板的题号和手写的答题答案(数字) opencv怎么训练 在线SaaS系统做接口版本滚动更新 stripe相关支付流程 流程示意图 error: linker `link.exe` not found | = note: program not found - rust 给我一份关于stripe平台的使用开发说明 奥数-平面几何经典定理 奥数-组合数学 奥数-几何 奥数-代数 奥数-数论
c++学习记20260219
ace--碳水化合物 · 2026-02-19 · via 博客园 - ace--碳水化合物

C++代码知识点详细解析


#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
	int a,b,m=3,n=4;
	a=7*2+-3%5-4/3;
	b=(m++)-(--n);
	cout<<a<<"\t"<<b<<"\t"<<m<<"\t"<<n<<endl; 
	return 0; 
} 

您提供的这段代码虽然简短,但包含了C++编程中的多个重要知识点。以下是对每个知识点的详细整理:

一、预处理指令与头文件

#include <stdio.h>
#include <iostream>
#include 预处理指令,用于在编译前将指定文件的内容包含到当前文件中 #include < > 使用尖括号表示在系统标准路径中查找头文件 头文件的作用 包含函数声明、类定义、常量等,使程序能使用这些功能 stdio.h 标准输入输出头文件(C语言风格),提供printf、scanf等函数 iostream 标准输入输出流头文件(C++风格),提供cin、cout等对象
知识点 说明

注意事项:

  • #include <stdio.h> 是C语言头文件,C++中更推荐使用 #include <cstdio>
  • #include <iostream> 是C++标准头文件,没有 .h 后缀
  • 两个头文件可以共存,但通常只需 iostream 即可

二、命名空间

using namespace std;
命名空间 用于组织代码,避免命名冲突的机制 std C++标准库的命名空间,所有标准库组件都在其中 using namespace std; 将std命名空间中的所有名称引入当前作用域
知识点 说明

如果不使用这行代码,需要这样写:

std::cout << a << std::endl;  // 每次都要加 std::

三、主函数

int main()
main函数 程序的入口点,每个C++程序必须有且仅有一个main函数 返回值类型 int 表示函数返回一个整数值给操作系统 return 0; 返回0表示程序正常结束,非0值通常表示错误
知识点 说明

四、变量声明与初始化

int a, b, m = 3, n = 4;
变量声明 告诉编译器变量的名称和类型 int 整型数据类型,通常占用4字节 同时声明多个变量 用逗号分隔同一类型的多个变量 初始化 在声明时给变量赋初始值,如 m = 3
知识点 说明

等价写法:

int a;      // 声明但不初始化(包含随机值)
int b;      // 声明但不初始化
int m = 3;  // 声明并初始化
int n = 4;  // 声明并初始化

五、运算符优先级(核心难点)

a = 7 * 2 + -3 % 5 - 4 / 3;

1. 运算符优先级表(从高到低)

最高 () 从左到右 括号 ↑ +-(单目) 从右到左 正负号 ↑ */% 从左到右 乘、除、取模 ↑ +-(双目) 从左到右 加、减 最低 = 从右到左 赋值
优先级 运算符 结合性 说明

2. 表达式分解计算

a = 7 * 2 + -3 % 5 - 4 / 3;

步骤1:识别单目负号

  • -3 中的负号是单目运算符,优先级最高
  • 等价于 (-3) % 5

步骤2:计算乘、除、取模(从左到右)

  • 7 * 2 = 14
  • (-3) % 5 = -3 (C++中,取模结果符号与被除数相同)
  • 4 / 3 = 1 (整数除法,截断小数部分)

步骤3:计算加、减(从左到右)

  • 14 + (-3) = 11
  • 11 - 1 = 10

步骤4:赋值

  • a = 10

3. 重要结论

  • 单目运算符优先级高于双目运算符,所以 -3 不需要加括号
  • 整数除法会截断4/3 结果是1,不是1.333
  • 取模运算结果符号负数 % 正数 = 负数

六、自增自减运算符

b = (m++) - (--n);
++ 运算符 自增1 -- 运算符 自减1 前缀形式 (++m) 先自增,后使用变量的值 后缀形式 (m++) 先使用变量的值,后自增
知识点 说明

执行过程分解:

初始状态: m = 3, n = 4

计算 --n(前缀自减):

  1. 先将n的值减1:n 从4变为3
  2. 表达式 --n 的值为3

计算 m++(后缀自增):

  1. 先使用m的当前值3作为表达式的值
  2. 然后将m的值加1:m 从3变为4

计算减法:

b = (m++) - (--n) = 3 - 3 = 0

最终结果:

  • a = 10
  • b = 0
  • m = 4 (因为执行了后自增)
  • n = 3 (因为执行了前自减)

七、输出流

cout << a << "\t" << b << "\t" << m << "\t" << n << endl;
cout 标准输出流对象,用于向控制台输出 << 插入运算符,将数据发送到输出流 链式操作 多个 << 可以连续使用 "\t" 转义字符,表示制表符(Tab) endl 结束当前行并刷新输出缓冲区,等价于 "\n"
知识点 说明

输出结果:

10      0       4       3

八、注释

// 这是单行注释
/* 这是
   多行注释 */

您的代码中没有注释,但这是一个重要知识点。

九、return语句

return 0;
返回值 将结果返回给函数的调用者 main函数的返回值 返回给操作系统,0表示程序成功执行 可省略? C++标准中,main函数末尾省略return 0会自动添加
知识点 说明

十、潜在问题与改进建议

同时包含stdio.h和iostream 冗余 只保留 #include <iostream> 未初始化变量a和b 虽然之后赋值了,但习惯上初始化 int a = 0, b = 0, m = 3, n = 4; 负数取模的行为 在不同语言中可能不同 明确意图,必要时加注释 整数除法截断 可能不是期望的结果 使用浮点数或显式转换
问题 说明 改进建议

改进后的代码:

#include <iostream>
using namespace std;

int main() {
    int a = 0, b = 0, m = 3, n = 4;
    
    // 注意:负数取模在C++中结果为负数
    a = 7 * 2 + (-3) % 5 - 4 / 3;  // 加括号使意图更明确
    
    b = (m++) - (--n);
    
    cout << "a = " << a << "\t";
    cout << "b = " << b << "\t";
    cout << "m = " << m << "\t";
    cout << "n = " << n << endl;
    
    return 0;
}

总结:这道题考察的核心知识点

  1. 预处理指令 - #include 的使用
  2. 命名空间 - using namespace std;
  3. 变量声明与初始化 - int m = 3
  4. 运算符优先级 - 单目负号 > 乘除取模 > 加减 > 赋值
  5. 负数取模 - 结果符号与被除数相同
  6. 整数除法 - 截断小数部分
  7. 自增自减 - 前缀与后缀的区别
  8. 输出流 - cout<< 的使用
  9. 转义字符 - \t 制表符
  10. main函数返回值 - return 0;