如果我定义一个类似static double a[100];
的数组,那么我可以稍后将其编入索引,就像a[1][1]
一样吗?我想如果我想要一个二维数组,我需要像static double a[100][100];
答案 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的某些数字。