前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 | 每日基础(36)

C语言 | 每日基础(36)

作者头像
小林C语言
发布2020-08-28 15:25:35
2930
发布2020-08-28 15:25:35
举报

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

阿一:这并非易事。一种办法是传入指向 [0][0] 成员的的指针和两个维数, 然后 “手 工” 模拟数组下标。

void f2(int *aryp, int nrows, int ncolumns)

{ ... array[i][j] is accessed as aryp[i * ncolumns + j] ... }

这个函数可以如下调用:

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

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

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

读者:当数组是函数的参数时, 为什么 sizeof 不能正确报告数组的大小?

阿一:编译器把数组参数当作指针对待, 因而报告的时指针的大小。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档