#define maxSize 50
正确定义方法: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中的最大值和最小值