正文

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

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

分享到:

 

在第55.4节中介绍过可以用数组名作函数的参数。前面已经多次强调: 数组名代表数组首元素的地址。用数组名作函数的参数,传递的是数组首元素的地址。很容易推想: 用指针变量作函数形参,同样可以接收从实参传递来的数组首元素的地址(此时,实参是数组)。下面将第55.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]的值
}

阅读(2427) | 评论(0)


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

评论

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