【发布时间】:2015-10-02 17:44:10
【问题描述】:
我一直在用 C 中的 2D 数组做各种问题。每个问题就像在我头上敲了另一个椰子,因为每个问题都使用不同的方法。例如,有些使用“取 2D 数组(如 a[2][4 ]),现在这会创建两个数组,其中一个数组的大小为 2,包含二维数组每一行的地址(就像这样有两行,每行四个值)“。而其他方法将其视为连续的一维数组表示。现在使用哪种方法。适当的内存映射会很有帮助。下面是锻炼的示例问题。
int main()
{
unsigned int x[4][3] = {{1, 2, 3}, {4, 5, 6},
{7, 8, 9}, {10, 11, 12}};
printf("%u, %u, %u", x+3, *(x+3), *(x+2)+3);
}
output:2036,2036,2036
现在,如果是第一种方法,为什么x+3和*(x+3)的地址是一样的?
【问题讨论】:
-
内存布局是一个由 12 个连续整数组成的块。如果您改用数组索引表示法,您可能能够更好地回答您自己的问题。请记住,
*(a+b)表示a[b]。所以您正在打印&x[3]、&x[3][0]和&x[2][3]。其中第一个是数组的地址,另外两个是 int 的地址。 -
%p地址,.....
标签: c arrays memory multidimensional-array