繁体   English   中英

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

[英]Defining and Indexing into a two-dimensional array - C

如果我定义一个像static double a[100];的数组static double a[100]; 然后我可以像以后一样索引它a[1][1]吗? 我想如果我想要一个二维数组,我需要像static double a[100][100];那样定义它static double a[100][100];

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

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

是的你可以有一个二维阵列a[100][100]并访问a[1][1]

不直接,因为类型不匹配。 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二维数组同构是合理的。 基本上两者都保证具有相同的内存布局。 这是由于二维阵列连续“排列”排列的事实(即第一行,第二行,......,最后一行)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM