gpt4 book ai didi

c - C如何检索二维数组的行地址

转载 作者:行者123 更新时间:2023-12-04 05:34:39 27 4
gpt4 key购买 nike

有人可以向我解释当您只使用一个下标访问二维数组时,C 如何检索一行的正确内存地址吗?

例子 -

int array2D[2][2] = {1,2,3,4};
printf ( "starting address of row2 = %p" , array2D[1]);

我知道在 C 中下标时实际发生的是指针添加,因此对于 1d 数组,数组名称指向元素 0。在这种情况下,如果我想要元素 1,编译器将采用起始地址(比如 4000)和将 4 添加到它(假设是 4 位 int),以便返回的是内存地址 4004 处的项目。

我的理解是,当你填充一个二维数组时,就像在我的例子中一样,它们是按顺序分配的,所以我会有

1 2
3 4
在地址

4000 4004

4008 4012

那么 C 是如何计算出在这种情况下 array2D[1] 应该指向 4008 而不是 4004 的呢?它是运行 sizeof() 运算符还是我在这里误解了一个基本原理?

提前致谢

最佳答案

C 知道每行有多长,因此它进行乘法以找到该行。

int x[][3] = {{1,2,3},{4,5,6}};

然后 &x[1][0]&x[0][0]3 * sizeof(int) .

这就是为什么在多维 C 数组声明中,必须指定除第一维之外的所有维度。

关于c - C如何检索二维数组的行地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com