《C++大学教程》2007.9 数组传递的进一步讨论 数组传递的本质是地址传递,因此形参和实 参用数组名和指针是一样的。 >数组传递是函数原型可写为: type fun(type a],int size); 也可写为type fun(type*p,int size); 但在函数内部,a和p都能当作数组使用 >调用时,对这两种形式都可用数组名或指针 ,建议:如果传递的是数组,用第一种形式: 如果传递的是普通的指针,用第二种形式
《C++大学教程》 2007.9 v 数组传递的本质是地址传递,因此形参和实 参用数组名和指针是一样的。 Ø 数组传递是函数原型可写为: type fun(type a[], int size); 也可写为 type fun(type *p, int size); 但在函数内部,a和p都能当作数组使用 Ø 调用时,对这两种形式都可用数组名或指针 v 建议:如果传递的是数组,用第一种形式; 如果传递的是普通的指针,用第二种形式
《C++大学教程》2007.9 C++将数组名作为参数传递处理成指针的传递 #include <iostream> using namespace std; void f(int arr,int k) {cout <sizeof(arr)<<"<sizeof(k)<<endl; void main() {inta[10]={1,2,3,4,5,6,7,8,9,0; 输出: cout <sizeof(a)<<endl; 40 fa,10);
《C++大学教程》 2007.9 #include <iostream> using namespace std; void f(int arr[], int k) {cout << sizeof(arr) << " " << sizeof(k) << endl; } void main() { int a[10]={1,2,3,4,5,6,7,8,9,0}; cout << sizeof(a) << endl; f(a,10); } 输出: 40 4 4 C++将数组名作为参数传递处理成指针的传递
《C++大学教程》2007.9 数组传递的灵活性 void sort (int p[]int n) {.} main ( {inta[100]; sort (a, 100);/排序整个数组 sort(a,50);//排序数组的前50个元素 sort(a+50,50);//排序数组的后50个元素
《C++大学教程》 2007.9 void sort(int p[ ] , int n) {...} main() {int a[100]; ... sort(a, 100); //排序整个数组 sort(a, 50); //排序数组的前50个元素 sort(a+50, 50); //排序数组的后50个元素 ... }
《C++大学教程》2007.9 实例 设计一函数用分治法在一个整数数组中找出最 大和最小值。 具体方法是: >如果数组中只有两个元素,则大的一个就是最大数, 小的就是最小数。这种情况不需要递归。 >否则,将数组分成两半,递归找出前一半的最大最 小值和后一半的最大最小值。取两个最大值中的较 大者作为最大值,两个最小值中的较小值作为最小 值
《C++大学教程》 2007.9 v 设计一函数用分治法在一个整数数组中找出最 大和最小值。 v 具体方法是: Ø 如果数组中只有两个元素,则大的一个就是最大数, 小的就是最小数。这种情况不需要递归。 Ø 否则,将数组分成两半,递归找出前一半的最大最 小值和后一半的最大最小值。取两个最大值中的较 大者作为最大值,两个最小值中的较小值作为最小 值
《C++大学教程》2007.9 伪代码 void minmax int a[]int n,int *min ptr,int *max ptr) switch (n) {case1:最大最小都是aO case2:大的得放入*max ptr,小的放入*min ptr; Default::对数组a的前一半和后一般分别调用minmax; 取两个最大值中的较大者作为最大值; 取两个最小值中的较小值作为最小值
《C++大学教程》 2007.9 void minmax ( int a[ ] , int n , int *min_ptr , int *max_ptr) { switch (n) { case 1: 最大最小都是a[0]; case 2: 大的得放入*max_ptr,小的放入*min_ptr; Default: 对数组a的前一半和后一般分别调用minmax; 取两个最大值中的较大者作为最大值; 取两个最小值中的较小值作为最小值 } }