t=array[k];array[k]=array[i];array[i]=t;
}
}
第5章数组
运行情况如下:
entertheoriginlarray:
69-2568711-543077↙//输入10个数
thesortedarray:
-54-2036911567787
关于用数组名作函数参数有两点要说明:
(1)如果函数实参是数组名,形参也应为数组名(或指针变量,关于指针见第5章),形参不能声明为普通变量(如intarray;)。实参数组与形参数组类型应一致(现都为int型),如不一致,结果将出错。
(2)需要特别说明的是:
数组名代表数组首元素的地址,并不代表数组中的全部元素。因此用数组名作函数实参时,不是把实参数组的值传递给形参,而只是将实参数组首元素的地址传递给形参。
第5章数组
形参可以是数组名,也可以是指针变量,它们用来接收实参传来的地址。如果形参是数组名,它代表的是形参数组首元素的地址。在调用函数时,将实参数组首元素的地址传递给形参数组名。这样,实参数组和形参数组就共占同一段内存单元。见图5.6。
图5.6
第5章数组
在用变量作函数参数时,只能将实参变量的值传给形参变量,在调用函数过程中如果改变了形参的值,对实参没有影响,即实参的值不因形参的值改变而改变。而用数组名作函数实参时,改变形参数组元素的值将同时改变实参数组元素的值。在程序设计中往往有意识地利用这一特点改变实参数组元素的值。
实际上,声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[]这样的形式表示array是一维数组名,以接收实参传来的地址。因此array[]中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理。形参一维数组的声明中可以写元素个数,也可以不写。
第5章数组
函数首部的下面几种写法都合法,作用相同。
voidselect_sort(intarray[10],intn)//指定元素个数与实参数组相同
voidselect_sort(intarray[],intn)//不指定元素个数
voidselect_sort(intarray[5],intn)//指定元素个数与实参数组不同
在学习第6章时可以进一步知道,C++实际上只把形参数组名作为一个指针变量来处理,用来接收从实参传过来的地址。前面提到的一些现象都是由此而产生的。
第5章数组
3.用多维数组名作函数参数
如果用二维数组名作为实参和形参,在对形参数组声明时,必须指定第二维(即列)的大小,且应与实参的第二维的大小相同。第一维的大小可以指定,也可以不指定。如
intarray[3][10];//形参数组的两个维都指定
或intarray[][10];//第一维大小省略
二者都合法而且等价。但是不能把第二维的大小省略。下面的形参数组写法不合法:
intarray[][];//不能确定数组的每一行有多少列元素
intarray[3][];//不指定列数就无法确定数组的结构
在第二维大小相同的前提下,形参数组的第一维可以与实参数组不同。例如,实参数组