当前位置: 首页 > news >正文

函数f(int a,int b),a和b的地址关系?

你问的这个问题其实涉及到函数参数在内存中的存放顺序,尤其是形参ab在栈上的地址关系


1. 一般情况说明

void f(int a, int b) {// 这里a和b是函数的形参
}
  • ab 是按顺序传入函数的参数。
  • 在大多数编译器和常见平台上(比如 x86/x64 的系统),函数参数会按顺序压栈,先传入的参数(a)会位于更高地址,后传入的参数(b)会位于更低地址。
  • 因此,b 的地址通常比 a,即:&b < &a

2. 为什么是这样?

  • 函数调用时,参数是从右往左压栈的(cdecl调用约定)。
  • 第一个参数a最后入栈,位于栈顶(高地址)。
  • 第二个参数b先入栈,位于栈底(低地址)。

示意图:

栈顶(高地址)
----------------
| 参数 a 地址   |  ← &a
----------------
| 参数 b 地址   |  ← &b
----------------
栈底(低地址)

3. 注意事项

  • 以上是典型的**栈增长方向向下(地址递减)**的系统默认情况(比如大多数x86架构)。
  • 具体地址顺序依赖于编译器实现、调用约定、CPU架构,不完全固定。
  • 有些架构或调用约定可能会使用寄存器传递参数,此时参数可能不在栈上,地址无意义。
  • 如果参数是寄存器传递,那么可能根本没有对应的内存地址。

4. 小实验验证(GCC x86-64 Linux)

#include <iostream>
using namespace std;void f(int a, int b) {cout << "&a = " << &a << endl;cout << "&b = " << &b << endl;
}int main() {f(1, 2);return 0;
}

可能输出:

&a = 0x7ffee5c0d8dc
&b = 0x7ffee5c0d8d8

&b 小于 &a,地址低。


总结:

参数顺序地址关系(典型x86)
f(int a,int b)&b < &a(后面的参数地址更低)

http://www.dtcms.com/a/298403.html

相关文章:

  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——5. 集成OpenCV:让程序拥有“视力”
  • 【NetTopologySuite库】使用Polygonizer线构面,并获取割边、悬挂边、无效环
  • ✨ 使用 Flask 实现头像文件上传与加载功能
  • TIM 实现定时中断【STM32L4】【实操】
  • 原生微信小程序如何调整开发版本
  • 全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石
  • 数仓主题域划分
  • 机器学习(一)KNN,K近邻算法(K-Nearest Neighbors)
  • 不用电脑要不要关机?
  • win通过OpenSSL生成.ssh id_rsa密钥方法
  • 反射和SPI
  • 【DeepRare】疾病识别召回率100%
  • Haprxy七层代理
  • 呼叫中心系统管理权限功能配置
  • 深度学习篇---图片分辨率
  • Agentic RAG理解和简易实现
  • AMD官网下载失败,不让账户登录下载
  • 集合专题之Map
  • Kimi K2 大语言模型技术特性与应用实践分析
  • 初识opencv04——图像预处理3
  • 太极生两仪,两仪生四象,四象生八卦
  • mybatisX的自定义模板生成
  • 【深基12.例1】部分背包问题 Java
  • docker 挂载卷
  • 【C++】二叉搜索数
  • 使用Akshare获取股票历史数据
  • Avalonia 发布完cv到Linux上运行 出现字体丢失/不显示问题
  • [NLP]UPF基本语法及其在 native low power verification中的典型流程
  • 闲鱼多账号运营安全策略 如何规避同ip
  • MC_GearInPos电子齿轮