定义和索引到二维数组 - C.

时间:2015-02-05 17:38:30

标签: c

如果我定义一个类似static double a[100];的数组,那么我可以稍后将其编入索引,就像a[1][1]一样吗?我想如果我想要一个二维数组,我需要像static double a[100][100];

那样定义它

3 个答案:

答案 0 :(得分:2)

  

如果我定义一个像静态双a [100]的数组;然后我可以索引   它后来就像这样[1] [1]?

不..你不能。这只是一个单维数组a [1] [1]将随机访问某些内存导致未定义的行为,因此将在编译期间报告为错误。

是的,您可以拥有2D数组a[100][100]并访问a[1][1]

答案 1 :(得分: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相同类型的二维数组的同构似乎是合理的。基本上两者都保证具有相同的内存布局。这是因为二维阵列按行排列&#34;连续(即第一行,第二行,......,最后一行)。

答案 2 :(得分:-1)

您不能简单地将一维数组制作成二维数组。但是,您可以创建一个类似int a[100][100]的数组,并通过提供int b = a[x][y]等位置来访问数组中的值,其中x和y是从0到99的某些数字。