开发者社区> 问答> 正文

我怎样编写接受编译时宽度未知的二维数组的函数 ?

我怎样编写接受编译时宽度未知的二维数组的函数 ?

展开
收起
游客56pszsvgthciu 2022-03-29 02:26:16 348 0
1 条回答
写回答
取消 提交回答
  • 这并非易事。一种办法是传入指向 [0][0] 成员的的指针和两个维数, 然后 ``手工" 模拟数组下标。 void f2(int *aryp, int nrows, int ncolumns) { ... array[i][j] is accessed as aryp[i * ncolumns + j] ... } 这个函数可以用问题 6.15 的数组如下调用:

    f2(&array[0][0], NROWS, NCOLUMNS);
    

    但是, 必须注明的一点是, 用这种方法通过 ``手工" 方式模拟下标的程序 未能严格遵循 ANSI C 标准; 根据官方的解释, 当 x >= NCOLUMNS 时, 访问 &array[0][0][x] 的结果未定义。

    C99 允许变长数组, 一旦接受 C99 扩展的编译器广泛流传以后, VLA 可能是 首选的解决方案。gcc 支持可变数组已经有些时日了。

    当你需要使用各种大小的多维数组的函数时, 一种解决方案是象问题 6.13 那样动态模拟所有的数组。

    2022-03-29 02:26:38
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载