c - 如何找到单元格索引号在二维数组中?

标签 c arrays multidimensional-array memory-address

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

相关文章:

c - 函数声明和定义 C - 参数定义为 pascal : what should it be?

javascript - 根据选项将 axios.get URL 传递到 axios.all

java 将 char 二维数组(字母)的值转换为整数(数字)

json - 快速处理嵌套的 json 数组

转换和 copy_to_user 宏

C - do while 循环不会停止运行

c++ - 为什么是 0022FF08 + sizeof(int) = 0022FF0C 而不是 0022FF0A?

java - 返回盒子的数组

javascript - 类似于 JavaScript 对象的合并/连接方法.. 不扩展

c - 如何按行和列对二维数组进行排序?