You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不修改main函数仅修改function函数将a改为2、b改为5?

解决方案

要实现目标,我们可以利用栈上局部变量的布局特性来修改main中的a,同时保留修改b的逻辑,修改后的function代码如下:

int& function(int a, int* b, int c) {
    // 通过栈布局定位main中的a变量并修改其值为2
    *(reinterpret_cast<int*>(b) + 1) = 2;
    // 返回b的引用,让后续赋值操作修改main中的b为5
    return *b;
}

原理说明

  • main中的a、b、c是连续声明的局部变量,在栈上通常按声明顺序从高地址到低地址分配空间(栈向下增长),因此a的内存地址紧邻b的高地址侧。
  • 通过b的指针,我们可以通过指针运算定位到a的地址,使用reinterpret_cast进行类型转换后直接修改其值。
  • 保留返回*b的引用,确保function(a, &b, c) = 5能将main中的b修改为5,而c未被任何操作修改,保持初始值1。

注意:这种方法依赖于编译器的栈布局实现,属于特定场景下的技巧,并非标准C++的可移植写法,但符合题目"仅修改function函数"的限制条件。

内容的提问来源于stack exchange,提问作者Stuywesant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:40:44