gpt4 book ai didi

c - 数组内存分配

转载 作者:行者123 更新时间:2023-11-30 21:46:05 25 4
gpt4 key购买 nike

这是一个编码网站的问题......

替换“?”带有一个整数,以便输出为 4。

int main()
{
int arr[7];
int b,c,d,a;
a=4;
printf("%d",arr[?]);
return 0;
}

我试图弄清楚这个问题,结果发现答案是-4。现在,如果我再声明一个变量(如代码第 4 行中的 int b,c,d,e,a),则答案为 -5。

请有人解释一下编译器的行为方式以及内存分配的原因(负索引)。

最佳答案

首先,请注意:永远不要编写任何依赖于这种行为的代码,因为它会因编译器的不同而有所不同。

编辑:由于第一段显然不够清楚:越界访问数组是未定义的行为,这意味着编译器可能会生成一个执行编译器选择的任何操作的程序。在这里,我正在解释发布者的编译器可能选择做什么,但结果也可能偶然变成 4。

您的编译器显然已选择按如下方式布置变量(假设第一个变量最终位于地址 100):

  • 100:一个
  • 104:d
  • 108:c
  • 112:b
  • 116:arr[0]
  • 120:arr[1]
  • ...
  • 140:arr[6]

由于 arr 从 116 开始,并且其每个元素 (int) 的大小为 4 个字节,因此 arr[-4] 为116 + 4 * (-4) = 100,这是 a 所在的位置。

关于c - 数组内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9584447/

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