数组参数

在C++中,数组永远不会按值传递。它是传递第一个元素(准确的说是第0个元素)的指针。例如,如下的声明:

             void fun( int [10]) ;

被编译器视为:

             void fun( int* ) ;

数组的长度与参数声明无关。因此,下列三个声明是等价的:

             void fun( int* ) ;

             void fun( int[] ) ;

             void fun( int[10] ) ;

因此,我们需明白,数组长度不是参数类型的一部分。函数不知道传递给它的数组的实际长度,编译器也不知道。当编译器对实参类型进行参数类型检查时,并不检查数组的长度。

             void fun( int [10]) ;

被编译器视为:

             void fun( int* ) ;

那么我们如何在向函数传递形参时使其知道它的长度。有两种机制;

1、一种常见的机制是提供一个含有数组长度的额外参数。如

             void fun( int* , int size ) ;

2、将参数声明成为数组的引用。当参数是一个数组类型的引用时,数组长度成为参数和实参类型的一部分,编译器检查数组实参的长度在函数参数类型中指定的长度是否匹配。

//参数为10个int的数组

             void fun(int (&arr)[10] ) ;

             int main()

             {

                 int i  ;

                 int  j[2] ;

                 fun(i) ;  //错误:实参类型不是10个int的数组,i不是数组

                 fun(j) ; //错误:实参类型不是10个int的数组,j是int类型的数组,但是其个数不是10个

                 return 0 ;

}

因为现在数组的长度是参数类型的一部分,所有函数fun的这个版本只接受10个int的数组。

 

特别注意:

当参数是多维数组时,参数必须指明第一维之外的所有维的长度。例如

             void fun(int matrix[][10], int rowSize) ;

把matrix声明成一个二维数组,每行有10个列元素构成。matrix可以被等价的声明为:

             int matrix[][10] ==> int (*matrix)[10]

    int   (*matrix)[10]   :matrix是指针,指向一个数组。此数组有10个int型元素。

注意:*matrix周围的括号是必须的,因为下标操作符的优先级较高。下列声明:

             int *matrix[10] ;

表示数组matrix里存放的是10个指向int型的指针

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值