-2
在CodeBlocks v13.12上运行GCC v4.8.1时,此程序给出输出:2, 0
。有人可以解释为什么或如何?阵列:超出边界计算
#include <stdio.h>
int main ()
{
int function [ 2 ] [ 3 ] = { { 1, 2, 3 }, { 4 } }, i = 1, j = 1;
function [ i + 1 ] [ j ] = function [ j ] [ i + 1 ]; // Assignment Statement
printf ("%d, %d", function [ i ] [ j ], function [ j ] [ i + 1 ]);
return 0;
}
我也注意到,在Assignment Statement
,表达的LHS总是分配给变量i
。因此,例如,如果语句变更为:
function [ i + 1 ] [ j ] = 100; // Assignment Statement
的i
的价值将是100
。
谢谢戈皮,你可以帮助第二部分的问题即。为什么'我'的价值在变化? –
答案已经处理了。 **未定义的行为**意味着任何事情都可能发生。你为什么不停止写下阵列的末尾?你为什么认为这样做会是一个好主意? –
@ DMehta当我们说未定义的行为。我们无法解释它的结果。 – Gopi