在C程序设计中,如果给定一个二维数组,如(int a[5][3]),并且给定了特定元素(单元格)的基地址和地址,并且必须找到该元素(单元格)的索引号(行和列号),我们能找到吗?如果是怎么做的?
我知道找到地址的公式是这样的
内景a[R][C];
地址(a[i][j])=ba+大小(C*i+j);
如果ba,R,C,大小和地址(a[i][j])。。。如何发现i和j的价值?
要找到2个变量的值,我们需要2个方程,但我找不到第2个方程。

最佳答案

特定地址减去基址,就得到了从基址到特定地址的字节大小。
如果使用sizeof(ba[0][0])(或sizeof(int))将该大小除以字节,则会得到项目数。
items / C给你第一个维度,items % C给你第二个维度。
因此:

int ba[R][C];
uintptr_t address = (uintptr_t)&ba[3][2]; // some random item

size_t items = (address - (uintptr_t)ba) / sizeof(ba[0][0]);
size_t i = items / C;
size_t j = items % C;

重要的是要用某种行为定义明确的类型来执行算法,因此uintptr_t
如果我做了int* address操作,那么address - ba将是无稽之谈,因为ba会衰减为int(*)[3]类型的数组指针。它们不是兼容类型。

关于c - 如何找到细胞索引号在二维阵列中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37382520/

10-09 18:34