有可能解决这个问题吗?

Qui*_*tic 6 c c++ puzzle

最近我遇到了这个难题:

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

问题是要替换"?" 使用整数使输出为4.我不确定,但我不认为这是以标准方式解决的?(不调用未定义的行为或取决于实现)如果否,那么我对如何知道非常感兴趣?

编辑:这个任务取自这里,我试图解决10,但遗憾的是它不是问题设定者想要的答案.但是,我解决了它使用一些预先测试的实现依赖mumbo-jumbo,但我真的没有解释它是如何真的有用!

这是答案:SPOILER,欢迎您解释

SLa*_*aks 15

在大多数实现中,arr[10](或7)将是4,因为本地将按顺序布局.

但是,这既不是既定的也不是标准的,不能依赖.

  • arr [7]占用7个字节,然后_int b_将在下一个字节中,__ int c__在下一个字节中...访问arr [10]将跳出数组并进入相邻内存,这是新的宣布的(希望) (2认同)
  • 如果变量在编译器遇到它们时在堆栈上分配,那么`a`可能在内存中低于*`arr`,因为堆栈经常向下增长 - 即.`a`可能与'arr [-4]`别名(或者实际上是一系列无限的其他可能性). (2认同)

Jon*_*son 14

假设没有符合标准的答案,你可以使用像arr [&a-arr]这样的操作(显然不是整数)吗?

编辑:感谢Ben和其他人在评论中做得更清洁.