2015-02-05 63 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相同类型的二维数组似乎是合理的。基本上都保证有相同的内存布局。这是由于二维阵列连续排列(即第一行,第二行,...,最后一行)的事实。