返回介绍

7.4 函数和二维数组

发布于 2024-10-08 23:14:05 字数 1968 浏览 0 评论 0 收藏 0

为编写将二维数组作为参数的函数,必须牢记,数组名被视为其地址,因此,相应的形参是一个指针,就像一维数组一样。比较难处理的是如何正确地声明指针。例如,假设有下面的代码:

则 sum( ) 的原型是什么样的呢?函数为何将行数(3)作为参数,而将列数(4)作为参数呢?

Data 是一个数组名,该数组有 3 个元素。第一个元素本身是一个数组,有 4 个 int 值组成。因此 data 的类型是指向由 4 个 int 组成的数组的指针,因此正确的原型如下:

其中的括号是必不可少的,因为下面的声明将声明一个由 4 个指向 int 的指针组成的数组,而不是由一个指向由 4 个 int 组成的数组的指针;另外,函数参数不能是数组:

还有另外一种格式,这种格式与上述原型的含义完全相同,但可读性更强:

上述两个原型都指出,ar2 是指针而不是数组。还需注意的是,指针类型指出,它指向由 4 个 int 组成的数组。因此,指针类型指定了列数,这就是没有将列数作为独立的函数参数进行传递的原因。

由于指针类型指定了列数,因此 sum( ) 函数只能接受由 4 列组成的数组。但长度变量指定了行数,因此 sum( ) 对数组的行数没有限制:

由于参数 ar2 是指向数组的指针,那么我们如何在函数定义中使用它呢?最简单的方法是将 ar2 看作是一个二维数组的名称。下面是一个可行的函数定义:

同样,行数被传递给 size 参数,但无论是参数 ar2 的声明或是内部 for 循环中,列数都是固定的——4 列。

可以使用数组表示法的原因如下。由于 ar2 指向数组(它的元素是由 4 个 int 组成的数组)的第一个元素(元素 0),因此表达式 ar2 + r 指向编号为 r 的元素。因此 ar2[r]是编号为 r 的元素。由于该元素本身就是一个由 4 个 int 组成的数组,因此 ar2[r]是由 4 个 int 组成的数组的名称。将下标用于数组名将得到一个数组元素,因此 ar2[r][c]是由 4 个 int 组成的数组中的一个元素,是一个 int 值。必须对指针 ar2 执行两次解除引用,才能得到数据。最简单的方法是使用方括号两次:ar2[r][c]。然而,如果不考虑难看的话,也可以使用运算符*两次:

为理解这一点,读者可以从内向外解析各个子表达式的含义:

sum( ) 的代码在声明参数 ar2 时,没有使用 const,因为这种技术只能用于指向基本类型的指针,而 ar2 是指向指针的指针。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文