在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/