《高级语言C++程序设计(第一版)-第六章.》.pdf
文本预览下载声明
6.1 选择排序算法 145
第六章 指针,引用与动态内存分配
在第四章,我们曾引入数组类型,它与本章介绍的指针和引用类型是C++
语言提供的三种导出类型,正确灵活地使用数组,指针和引用类型,是设计高
质量的C++程序所必经掌握的技术。
C++程序中所处理的数据主要以变量(和对象)的形式出现。每个变量有
两个最主要的属性,那就是变量的内容和地址。例如:
int a=3,b=5,c;
c=a+b;
在上面语句中,变量a,b,c 已被赋值。在它们被重新赋值或被释放之前,变
量名 a,b,c 就代表着它们的内容,即整型数 3 ,5 ,8 。由变量 a,b,c 参加的任何
运算,都是对它们的值3 ,5 ,8 进行的运算。
另一方面,C++语言也为用户对于变量所占空间的地址提供了进行操作的
机制,这就是指针。指针不是一种独立的数据类型,而是一种导出数据类型。
我们首先通过实例来说明指针的使用。
6.1选择排序算法
把已经存在一个数组里的n 个数按从大到小的顺序排列好:
//program6_1.cpp
#includestdlib.h
#includeiostream.h
#includeiomanip.h
void ssort(float *,int );
void main(void){
const int n=500;
int i;
float list[n],*pf;
for(i=0; in; i++) list[i]=rand( );
146 第六章 指针,引用与动态内存分配
pf=list[0];
ssort(pf,n); //后面的程序省略
}
void swap1(float *a,float *b){
float temp;
temp=*a;
*a=*b;
*b=temp;
}
void ssort(float *a,int m){
int i,j,index;
float elem;
for(i=0; im- 1; i++){
elem=*(a+i);
index=i;
for(j= i+ 1; jm; j++)
if(*(a+j)elem){
elem=*(a+j);
index=j;
}
swap1(a+i,a+index);
}
}
说明:
这个程序重点是介绍函数 swap1( )和 ssort( ) 的设计。主程序中关于数组
list[n] 中数据的获得及排序后的处理,我们可不予关心。
函数swap1( ) 的定义中使用了指针型的变量作参数。参数a,b 是float 型的
指针变量,即它们的值应是浮点型的地址。
在 swap1( ) 的调用语句中,实参 a+i,a+index,其中 a 为 float 型的指针,
i,index 为整型变量,C++ 语言允许指针变量+/-整数,其结果仍为指针。即
a+i,a+index 应表示数组List[ ] 中a 指向的元素后面的元素变量的地址。
在函数swap1( ) 中使用了*a 和*b,这里符号 ‘*’不是乘法运算符,而是表
示指针变量(a 或b )所指向的那个变量。例如:
int n=4, *p;
显示全部