2015-02-05 60 views
1

如果我定義了一個像static double a[100];這樣的數組,那麼我可以像索引a[1][1]那樣索引它嗎?我認爲,如果我想要一個二維數組,我需要定義它像static double a[100][100];定義和索引到一個二維數組中 - C

+0

爲什麼要允許?你爲什麼不嘗試一下呢? – mafso 2015-02-05 17:45:25

回答

2

如果我定義一個數組像靜態double a [100];那麼我可以稍後索引到 ,就像[1] [1]一樣?

不,你不能。這只是一個單維數組[1] [1]將隨機訪問某些內存導致未定義的行爲,因此將在編譯期間報告爲錯誤。

是你可以有一個二維數組a[100][100]和訪問a[1][1]

+1

'a [1] [1]'是編譯時錯誤,如果a被聲明爲'static double a [100];'。 – mch 2015-02-05 17:43:26

+0

@mch感謝它我將它添加到答案 – Gopi 2015-02-05 17:46:09

-1

你不能只是簡單地做一個一個維數組爲二維數組。但是,您可以創建一個像int a[100][100]這樣的數組,並通過提供它們的位置來訪問數組中的值,例如int b = a[x][y],其中x和y是從0到99的一些數字。

+2

_some數字從0到100_這是不正確的。 *** 100 ***會超出界限 – ryyker 2015-02-05 18:15:50

2

不是直接,因爲類型不匹配。所述a[1][1]等價於:

(*(*(a+1)+1) 

作爲你的陣列被定義爲static double a[100];,第二(外)解除引用僅僅是無效。

不過我相信你的可以創建一個指針,即模擬二維數組之內。這是證明了概念,以得到一個想法:

#include <stdio.h> 

int main(void) 
{ 
    static double a[100]; 

    for (int i = 0; i < 100; i++) 
     a[i] = i; 

    double (*p_a)[10] = (double(*)[10]) a; 

    printf("%f\n", a[55]); 
    printf("%f\n", p_a[5][5]); // evaluated as 5 * 10 + 5 

    return 0; 
} 

我不知道這完全由C標準認可的,你一定要小心不要出門界外。儘管如此,將100元素一維數組看作是同構10x10相同類型的二維數組似乎是合理的。基本上都保證有相同的內存佈局。這是由於二維陣列連續排列(即第一行,第二行,...,最後一行)的事實。