正文

C++ 第6章指针6.3.2 用指针变量作函数参数接收数组地址2008-10-02 12:22:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/38646.html

分享到:

  在第5章5.4节中介绍过可以用数组名作函数的参数。前面已经多次强调: 数组名代表数组首元素的地址。用数组名作函数的参数,传递的是数组首元素的地址。很容易推想: 用指针变量作函数形参,同样可以接收从实参传递来的数组首元素的地址(此时,实参是数组名)。下面将第5章5.4节中的例5.7程序改写,用指针变量作函数形参。 例6.6 将10个整数按由小到大的顺序排列。 在例5.7程序的基础上,将形参改为指针变量。 #include <iostream> using namespace std; int main( ) {void select_sort(int *p,int n);                  //函数声明 int a[10],i; cout<<″enter the originl array:″<<endl; for(i=0;i<10;i++)                                //输入10个数 cin>>a[i]; cout<<endl; select_sort(a,10);                              //函数调用,数组名作实参 cout<<″the sorted array:″<<endl; for(i=0;i<10;i++)                               //输出10个已排好序的数 cout<<a[i]<<″  ″; cout<<endl; return 0; }void select_sort(int *p,int n)                   //用指针变量作形参 {int i,j,k,t; for(i=0;i<n-1;i++) {k=i;  for(j=i+1;j<n;j++)                     if(*(p+j)<*(p+k)) k=j;                 //用指针法访问数组元素  t=*(p+k);*(p+k)=*(p+i);*(p+i)=t; } }   运行情况与例5.7相同。  本例与例5.7在程序的表现形式上虽然有不同,但实际上,两个程序在编译以后是完全相同的。C++编译系统将形参数组名一律作为指针变量来处理。   实际上在函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。 实参与形参的结合,有以下4种形式: 实  参 形  参 数组名               数组名 (如例5.7) 数组名          指针变量    (如例6.6) 指针变量       数组名 指针变量     指针变量 在此基础上,还要说明一个问题: 实参数组名a代表一个固定的地址,或者说是指针型常量,因此要改变a的值是不可能的。如 a++;              //语法错误,a是常量,不能改变   而形参数组名是指针变量,并不是一个固定的地址值。它的值是可以改变的。在函数调用开始时,它接收了实参数组首元素的地址,但在函数执行期间,它可以再被赋值。如 f(array[],int n) { cout<<array;                //输出array[0]的值 array=array+3;              //指针变量array的值改变了,指向array[3] cout<<*arr<<endl;           //输出array[3]的值 }

阅读(2439) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册