C&C++关于数组的定义,引用传参问题

C&C++关于数组的定义,引用传参问题
(1)数组的定义
        #define maxSize 50
        static int length = 10;

         正确定义方法:int array[maxSize]; 
        错误定义方法:int array[length];

            分析:数组的 [ ]中只能放入常量,maxSize是宏定义的常量,而length是定义的静态变量,所以用后一种方法定义就会抱错;我们一般定义的时候使用maxSize申请足够大的空间,但是赋值的时候使用length来赋值,也就是说不是所有申请的maxSize的空间都会在一开始被赋值。之所以这样,是为了方便以后的数组顺序表元素的删减和增加操作;比如删除最后一个元素,只需要 ”length--;“就可以了。

(2)数组的传参及引用问题 
        
        如果前面定义好了int型的数组 array[maxSize],int型变量min和max,需要用函数search()来找出数组的最大值和最小值,传参的情况如下
        实参:    正确传参    search(array,max,min);
                      错误传参1    search(array[ ],max,min);
                      错误传参2    search(array[maxSize],max,min);
                      错误传参3    search(array,&max,&min);
        
        形参:    正确传参1    void search(int *array,&max,&min){ }
                      正确传参2    void search(int array[ ],&max,&min){ }
                      错误传参1    void search(int array[maxSize],max,min){ }
        
        分析:实参的参数本身已经带有数据类型,可以直接传参,而形参则必须在传参的同时生命参数的类型。传参的时候注意,实参对应位置和形参对应位置的数据类型必须保持一致。
                  对于实参,search()函数第一个参数位置应该放入int *类型的变量array,即数组的首地址指针,不能放入array[ ]。而array[maxSize]的类型并不是int *,而是int型的变量array[50] (前面有宏定义的语句 #define maxSize 50),而且array[50]并没有被赋值,所以用array[50]传参就会报错,因此错误1 2 是因为第一个参数的类型不对;对于错误3,&max和 &min的类型都为int*型的整形指针,而形参需要的是int型的变量,所以类型不对就会抱错。千万不能以为&max表示max类型的引用,引用符号&只能对形参使用! 引用符号&只能对形参使用! 引用符号&只能对形参使用!(重要的事情说三遍),如果对实参使用,则表示取地址,因此实参的类型就会变成指针类型;
                 对于形参,第一个位置穿进来的为指针类型,因此可以用指针类型直接定义,为正确传参1的形式,也可以写成正确传参2形式的,但是这种形式(int array[ ])只能对形参使用,即只有形参定义的时候可以省略数组的长度! 只有形参定义的时候可以省略数组的长度! 只有形参定义的时候可以省略数组的长度!同样,如果是二维数组,省略形式为(int array[][maxSize]),也即是说第二个下表不能省略,只能省略第一个下标。对于错误传参1,没有&引用的后果就是被调用函数search( )执行完以后调用函数里面max和min的值不变!这样基础的错误自然不必多说。

示例代码如下:
    
 /* 线性表课后题3  以不多于3n/2的平均比较次数,找出n个整数的顺序表A中的最大值和最小值

分析:可以利用if else 语句来减少比较次数;因为最好的情况if成立,else就不用比较
所以比较次就可以减少一半

     */

#include <iostream>
using namespace std;
#define  maxSize  50
static int length = 10;

void search(int array[], int &max, int &min)
{
max = min = array[1];
for (int i = 1; i <= length;i++){
if (array[i] > max)max=array[i];
else if (array[i] < min)min = array[i];

}
}

int  main( )
{
int array[maxSize];
for (int i = 1,j=length; i <= length; i++,j--){ cout <<j<<": "; cin >> array[i]; }
for (int i = 1; i <= length; i++){ cout << array[i] << "  "; }

int max = 0;
int min = max;
search(array,max,min);
cout << "max" << max << "  min " << min << endl;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值