gpt4 book ai didi

c - C 中的激活记录

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:42 26 4
gpt4 key购买 nike

void test(int p1[10], int p2) {
int l1;
int l2[10];

printf("params are at %d and %d\n", &p1, &p2);
printf("locals are at %d and %d\n", &l1, &l2[0]);
}


int main(void) {
test(5, 10);
}

我对上面的代码有点困惑...当函数已经指定了 p[10] 的数组时,我们如何向测试函数提供参数 5。输出地址也很奇怪,p1 和 p2 应该相隔 40 个地址(10 个元素的数组乘以每个 int 4 个字节)。但是控制台显示它们只相隔 4 个单位....

最佳答案

  1. 5 隐式转换为指向 int 的指针(即 0x00000005)。
  2. 第一个数组参数实际上等同于一个指向 int 的指针,因为在 C 中你不能按值传递数组。因此你正在获取堆栈上两个局部变量的地址(指向int 和一个 int)。每个都是 4 个字节,因此它们的地址之间有 4 个字节的差异。

关于c - C 中的激活记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1480540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com