在 C 编程中,如果给出一个二维数组,如 (int a[5][3]),并且还给出了特定元素 (cell) 的基地址和地址,并且必须找到索引号。那个元素(单元格)(行号和列号)我们能找到吗?如果是怎么办?
我知道找地址的公式是这样的
int a[R][C];
地址(a[i][j])=ba+大小(C*i+j);
如果给定 ba, R,C,Size 和 address(a[i][j])...如何找到 i 和 j 的值?
为了找到 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/