有人能提供一个公式让我理解 n 维数组 (n≥2) 的内存表示吗,类似这样 "如何在内存中表示二维数组"?
这个计算只适用于二维数组。
那么如何计算一个五维数组呢?
好的....
我想我找到答案了:数组数据结构#二维数组
有人能提供一个公式让我理解 n 维数组 (n≥2) 的内存表示吗,类似这样 "如何在内存中表示二维数组"?
这个计算只适用于二维数组。
那么如何计算一个五维数组呢?
我想我找到答案了:数组数据结构#二维数组
int *ptr = malloc(N * sizeof *ptr);
if (ptr == NULL) /* handle allocation failure */
comp.lang.c FAQ是一个很好的资源;其中涵盖数组和指针的第6部分尤其出色。
a[i][j]
占用空间大小为 i*sizeof(int*)
用于存储指针数组,以及 i*j*sizeof(int)
用于存储最终的数组。a[i1][i2][i3]
是一个指向指针数组的指针数组。第一层包含 i1
个指针,第二层包含 i1*i2
个指针,第三层包含 i1*i2*i3
个整数。i1..iN
,将具有 N-1
层指针数组和 1 层整数数组。第 N 层的数组长度为 iN
,在该层中有 i1..iN-1
的乘积个数组。1 array, length i1, of pointers
i1 arrays, length i2, of pointers
i1*i2 arrays, length i3, of pointers
i1*i2*i3 arrays, length i4, of pointers
i1*i2*i3*i4 arrays, length i5, of ints
// WARNING I AM CHANGING NOTATION. N1..N5 are the lengths in each direction.
// i1..i5 are the indicies.
int* bigarray = malloc(sizeof(int)*N1*N2*N3*N4*N5);
// now instead of bigarray[i1][i2][i3][i4][i5], write this:
*(bigarray + i1*N2*N3*N4*N5 + i2*N3*N4*N5 + i3*N4*N5 + i4*N5 + i5);
我记得C语言中数组在内存中的存储方式并没有标准化。但是关于数组的一些信息以及它们可能如何存储在内存中,请参见以下两个链接:
http://webster.cs.ucr.edu/AoA/Windows/HTML/Arraysa2.html
http://publications.gbdirect.co.uk/c_book/chapter5/arrays.html
第一个链接更为通用,讨论了存储数组的不同方式,而第二个链接则讨论了C数组最可能在内存中的布局方式。
int arr[10][10];
声明了一个 10 行 10 列的二维int
数组。看不到任何指针对象。 - Keith Thompson