2015-01-08 152 views
-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

回答

2
function [ i + 1 ] [ j ] 

访问数组越界会导致未定义的行为。

function [ 2 ]是数组超出界限的访问。

+0

谢谢戈皮,你可以帮助第二部分的问题即。为什么'我'的价值在变化? –

+0

答案已经处理了。 **未定义的行为**意味着任何事情都可能发生。你为什么不停止写下阵列的末尾?你为什么认为这样做会是一个好主意? –

+0

@ DMehta当我们说未定义的行为。我们无法解释它的结果。 – Gopi