[英]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.