[C++程序设计]用指针变量作函数参数接收数组地址
1 #include <iostream> 2 using namespace std; 3 4 void select_sort(int *p, int n) 5 { 6 int i, j, k; 7 for(i = 0; i < n - 1; i++) 8 { 9 for(j = i + 1; j < n; j++) 10 { 11 if(p[i] > p[j]) 12 { 13 k = p[i]; 14 p[i] = p[j]; 15 p[j] = k; 16 } 17 } 18 } 19 } 20 21 void select_sort1(int *p, int n) 22 { 23 int i, j, k; 24 for(i = 0; i < n - 1; i++) 25 { 26 for(j = i + 1; j < n; j++) 27 { 28 if(*(p + i) > *(p + j)) 29 { 30 k = *(p + i); 31 *(p + i) = *(p + j); 32 *(p + j) = k; 33 } 34 } 35 } 36 } 37 38 void printf(int *p, int n) 39 { 40 for(int i = 0; i < n; i++) 41 cout << *(p + i) << " "; 42 cout << endl; 43 } 44 45 int main() 46 { 47 int n = 10; 48 int a[] = {20, 4, 5, 22, 50, 23, 24, 29, 90, 1001}; 49 select_sort1(a, 10); 50 printf(a, 10); 51 return 0; 52 }
C++编译系统将形参数组名一律作为指针变量来处理,实际上在函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。
实参数组名a代表一个固定的地址,或者说是指针型常量,因此要 改变a的值是不可能的。如
a++; //语法错误,a是常量,不能改变
而形参数组名是指针变量,并不是一个固定的地址值。它的值是可以改变的。在函数调用开始时,它接收了实参数组首元素的地址,但在函数执行期间,它可以再被赋值。如
f(array[],int n)
{ cout<<array;
array=array+3;
cout<<*arr<<endl;
}