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

这并非易事。

一种办法是传入指向[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 那样动态模拟所有的数组。

参见问题6.15, 6.17, 6.12。

永不止步步 发表于01-14 10:42 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308467个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号