【发布时间】:2012-08-24 15:25:59
【问题描述】:
当您只使用一个下标访问二维数组时,有人可以向我解释 C 如何检索一行的正确内存地址吗?
示例 -
int array2D[2][2] = {1,2,3,4};
printf ( "starting address of row2 = %p" , array2D[1]);
我知道,当在 C 中下标时,实际发生的是指针添加,因此对于一维数组,数组名称指向元素 0。在这种情况下,如果我想要元素 1,编译器将采用起始地址(比如4000) 并在其上加 4(假设为 4 位 int),这样返回的是内存地址 4004 处的项目。
我的理解是当你填充一个二维数组时,就像我的例子一样,它们是按顺序分配的,所以我会有
1 2
3 4
地址
4000 4004
4008 4012
那么 C 如何计算出在这种情况下 array2D[1] 应该指向 4008 而不是 4004?它运行 sizeof() 运算符还是我在这里误解了基本原理?
提前致谢
【问题讨论】:
-
你的例子是一维数组。
-
不,你没有:请参阅 Keith Randall 的正确语法答案
-
@Useless,是的,他做到了。如果您指定完整的数组类型,则内括号是可选的。
-
有趣,我从来不知道!我不认为它具有可读性,但仍然很高兴知道。
标签: c pointers multidimensional-array pointer-arithmetic