【发布时间】:2012-03-23 23:24:48
【问题描述】:
这是一个编码站点的问题......
替换“?”使用整数,因此输出为 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。
请有人解释一下编译器的行为以及内存分配的原因(负索引)。
【问题讨论】:
-
对此没有有效的答案 - 您可能能够找到一个给出所需结果的值,但它将是编译器特定和体系结构特定的,并且将依赖于未定义的行为
-
你还没有初始化
arr所以你永远不知道! -
问你这个问题的人不懂C编程。
-
@another.anon.coward:他不需要。他正在寻找的值不在数组中,他依靠 C 缺乏数组绑定检查来获取
a。这是非常糟糕的,除非它是Exploiting Bugs 101的一部分,否则无论谁提出问题都需要被枪决。
标签: c arrays memory allocation