[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;

}

原文地址:https://www.cnblogs.com/galoishelley/p/3858311.html