函数与多维数组

函数的形参为一维数组时

int sum(int * n);      //函数原型
int sum(int * n){...}  //函数定义

那么如何编写处理二维数组的函数?
假设数组 junk是一个内含 3个数组元素的数组,每个元素是内含4个int类型值的数组(即junk是一个3行4列的二维数组)。
通过前面的讨论可知,这表明junk是一个指向数组(内含4个int类型值)的指针。那么可以这样声明函数的形参:

void somefuntion(int(*pt)[4]);

另外,如果当且仅当pt是一个函数的形式参数时,可以这样声明:

void somefunction( int pt[][4] );

注意,第1个方括号是空的。空的方括号表明pt是一个指针。这样的变量稍后可以用作相同方法作为junk。下面的程序示例中就是这样做的,如程
序清单10.17所示。注意该程序清单演示了3种等价的原型语法。

注意,下面的声明不正确:

int sum2(int ar[][], int rows); // 错误的声明

前面介绍过,编译器会把数组表示法转换成指针表示法。例如,编译器会把 ar[1]转换成 ar+1。编译器对ar+1求值,要知道ar所指向的对象大小。
下面的声明:

int sum2(int ar[][4], int rows);  // 有效声明

表示ar指向一个内含4个int类型值的数组(在我们的系统中,ar指向的对象占16字节),所以ar+1的意思是“该地址加上16字节”。如果第2对方括号是空的,编译器就不知道该怎样处理。
也可以在第1对方括号中写上大小,如下所示,但是编译器会忽略该值:

int sum2(int ar[3][4], int rows); /*有效声明,但是3将被忽略,下过与前一个声明相同*/

一般而言,声明一个指向N维数组的指针时,只能省略最左边方括号中的值:

int sum4d(int ar[][12][20][30], int rows);

因为第1对方括号只用于表明这是一个指针,而其他的方括号则用于描述指针所指向数据对象的类型。下面的声明与该声明等价:

int sum4d(int (*ar)[12][20][30], int rows); /* ar是一个指针*/

这里,ar指向一个12×20×30的int数组。

形参的命名格式可以如下:

int sum2(int ar[3][4], int rows);  // 与下面的声明相同
int sum2(int ar[][4], int rows);  // 标准形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值