2015-01-08 112 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