推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

java 多维动态数组_C中的动态多维数组

   2023-07-10 网络整理佚名1610
核心提示:考虑这个普通的数组分配:10);当我们做[3]时,这将转换为:3)*))取消引用地址:3*(int)[row]”转换为:row)取消引用地址:row*COLS*(int)地址计算最终正是您想要的:col*(int)

考虑这个普通的数组分配:

int* a = ((int) * 10);

类型“int”当然是指向 int 的指针,并且 (a) == (int) 。 当我们执行[3]时,这会转化为:

*(a + 3)

其中 (假设 (long) == (void *)) 取消引用地址:

(长)a + 3*(*a) == (长)a + 3*(int)

考虑示例代码的方法是,类型“int(*rptr)[COLS]”是指向大小为 COLS 的整数(静态、一维)数组的指针。 换句话说, (*rptr) == COLS * (int) 。 然而,就像“int *”一样,我们可以分配这些固定大小的一维数组对象的数组。 索引“rptr[row]”翻译为:

*(rptr + 行)

解引用地址:

(长)rptr + 行*(*rptr) == (长)rptr + 行*COLS*(int)

结果类型为“int[COLS]”,因此可以通过“[col]”再次索引。 地址计算最终正是您想要的:

(长)rptr + 行*COLS*(int) + 列*(int)

参考资料中提到的这个解决方案只有在列数(或者通常除了第一维之外的所有列数)在编译时固定的情况下才有效。 随着维度数量的增加,语法会变得有点混乱。 如果您需要使用在运行时动态确定多个维度,请参阅该页面了解其他策略。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON