菜鸟实现 1 + 2 + … + n(无循环/无递归)的真实心理路程

张开发
2026/6/24 21:00:27 15 分钟阅读
菜鸟实现 1 + 2 + … + n(无循环/无递归)的真实心理路程
目录✍️ 我的理解记录 一、题目代码结构要背着敲啊⚙️ 二、sum a[n] 到底做了什么 三、构造函数发生了什么 四、static 到底是什么之前的误解正确理解它的特点是⚠️ 六、一个容易忽略的问题 七、这题真正考什么1️⃣ 构造函数自动调用机制2️⃣ static共享机制3️⃣ 生命周期模型 八、我的总结很重要它的本质是✔ 只有一份✔ 所有对象共享✔ 属于“类域”不是对象✍️ 我的理解记录前几天学了一个很有意思的 C 面试题不能用循环、递归、if 判断实现 12…n。一开始初学C真的想不通怎么可以不用循环就可以算等差数列呢本质就是用数组一次性创建多个对象让构造函数自动连续执行从而把累加过程“隐式”跑完了。1 创建n个对象 就是开辟n个空间↓2 n次构造函数↓3 构造函数修改static变量↓4 得到累加 一、题目代码结构要背着敲啊核心代码大概是这样class sum { public: sum() { _s _i; _i; } static int Get_s() { return _s; } private: static int _i; static int _s; }; int sum::_i 1; int sum::_s 0; //调用方式 int sum_solution(int n) { sum a[n]; return sum::Get_s(); }⚙️ 二、sum a[n] 到底做了什么sum a[n];它不是“一个对象”而是 创建 n 个 sum 对象也就意味着调用构造函数 n 次 三、构造函数发生了什么每次构造都会执行_s _i;_i;所以实际过程是次数_i_s1112233364410最终_s 1 2 ... n 四、static 到底是什么这是我最关键的收获。之前的误解我以前以为static 全局变量 / 定义就固定 / 不能改正确理解static不是“定义一个变量”而是“在静态区放一块长期存在的共享内存”它的特点是✔ 只有一份所有对象共享✔ 生命周期贯穿整个程序✔ 只初始化一次✔ 但值可以随时修改五、static内存层面的理解static变量不在对象里而是在静态存储区data / bssstatic更像是公共的资源但是又不是定死的更像是固定了内存空间保证她一直存在同时类又可以给她包装起来这也是C语言魅力的地方呢~~sum对象1 ┐ sum对象2 ├── 都在操作同一份 _s sum对象3 ┘⚠️ 六、一个容易忽略的问题如果我调用两次sum_solution(4);sum_solution(4);结果会错。原因是static变量不会自动重置它是“全局状态”不是“局部临时变量”。 七、这题真正考什么表面是数学题本质是1️⃣ 构造函数自动调用机制对象创建 → 自动执行构造函数2️⃣ static共享机制多个对象操作同一块内存3️⃣ 生命周期模型static变量贯穿整个程序运行 八、我的总结很重要它的本质是✔ 只有一份✔ 所有对象共享✔ 属于“类域”不是对象✔初始化一次可多次改变类 sum | |—— static _i 唯一一份 |—— static _s 唯一一份 对象 a1 对象 a2 对象 a3 → 都只是“使用它们”不是“拥有它们”

更多文章