高级语言C++程序设计 (第二版) 刘景、周玉龙編
高级语言C++程序设计 (第二版) 刘景、周玉龙编
第六章指针、引用与动态内存分配 ■61选择排序算法 选择排序算法思想:每次从无序的序列中选出最大者, 交换到序列的左端,这样,无序的序列越来越短,经 过n1步,达到排序的目的 [有序序列](无序序列) 选出最大交换到左端 选择排序算法: //program6-1 cpp #indlude #indude #indlude void main(void)
第六章 指针、引用与动态内存分配 ◼ 6.1 选择排序算法 选择排序算法思想:每次从无序的序列中选出最大者, 交换到序列的左端,这样,无序的序列越来越短,经 过n-1步,达到排序的目的。 [有序序列](无序序列) ➢ 选择排序算法: //program6-1.cpp #include #include #include void main(void) { 选出最大交换到左端
第六章指针、引用与动态内存分配 void main(void) int i, seed, n =20 cout>seed; cout <endl srand(seed);∥/始化随机种子 float list[20], pf for(=0;i<n;i++)∥成n个随机数并输出 i!ti]= rando;∥/产生0~32767之间的随机数。 cout<<setw(8)<< clist[i];/每个随机数的输出宽度为8 f(i+1)%8==0) cout<<endl
第六章 指针、引用与动态内存分配 void main(void) { int i,seed,n=20; cout>seed; cout<<endl; srand(seed);//初始化随机种子 float list[20],*pf; for(i=0;i<n;i++) //生成n个随机数并输出 { list[i]=rand();//产生0~32767之间的随机数。 cout<<setw(8)<<list[i];//每个随机数的输出宽度为8 if((i+1)%8==0) cout<<endl; }
第六章指针、引用与动态内存分配 cout< <endl pf=&list[o] sort(pfn);∥(n个数排序 i=0 while(i<ni cout<<sew(8)<<isti];/输出排序的n个数 ++ f(9%8==0) cout< <endl cout< <endl void swap1( float* a float*b){∥)交换两个变量的值 fie loat temp; temp=*a; a=*b; *b=temp
第六章 指针、引用与动态内存分配 cout<<endl; pf=&list[0]; ssort(pf,n); //对n个数排序 i=0; while(i<n){ cout<<setw(8)<<list[i];//输出排序的n个数 i++; if(i%8==0) cout<<endl; } cout<<endl; } void swap1(float *a,float *b) { //交换两个变量的值 float temp; temp=*a;*a=*b;*b=temp;}
第六章指针、引用与动态内存分配 void sort(float *a, int m) int i,j, index; float elem; for(i=0;elem elem=*(a+j) index=j swap1(a+i, a+index)
第六章 指针、引用与动态内存分配 void ssort(float *a,int m) { int i,j,index; float elem; for(i=0;ielem){ elem=*(a+j); index=j; } swap1(a+i,a+index); } }
第六章指针、引用与动态内存分配 62指针类型 621指针变量说明 格式:*〓 示例: int *ptri float a=3.0,b, cL4]: float *pa=&aj float *p[2]i&a, &bi float *pn=NULLi float *pc=ci float *pf=new float 63 point*pp;/ poInt是一个类,P是类对象指针 22指针变量的操作 1、取地址运算&和取内容运算*
第六章 指针、引用与动态内存分配 ◼ 6.2 指针类型 6.2.1 指针变量说明 格式: *= 示例: int *ptr; float a=3.0,b,c[4]; float *pa=&a; float *p[2]={&a,&b}; float *pn=NULL; float *pc=c; float *pf=new float; point *pp; //point是一个类,pp是类对象指针。 6.2.2 指针变量的操作 1、取地址运算&和取内容运算*
第六章指针、引用与动态内存分配 2、数组指针的算术运算 int a[10] pai pa=ai 则:a[]*(a+)、*(Pa+i)是等价的 注 指针的移动与类型有关。 a是常量,而pa是变量。当pa+=3时,*pa为a[3] 指针与二维数组的关系见:P173 3、指针的关系运算 三种情况:(P,173) 相等 与NULL比较 还可进行大于、小于、大于等于及小于等于等运算
第六章 指针、引用与动态内存分配 2、数组指针的算术运算 int a[10],*pa; pa=a; 则:a[i]、*(a+i)、*(pa+i)是等价的。 注: ➢ 指针的移动与类型有关。 ➢ a是常量,而pa是变量。当pa+=3时,*pa为a[3]。 ➢ 指针与二维数组的关系见:P.173. 3、指针的关系运算 三种情况: (P.173.) ➢ 相等 ➢ 与NULL比较 ➢ 还可进行大于、小于、大于等于及小于等于等运算
第六章指针、引用与动态内存分配 623指针与数组 1、指向数组元素的指针(P174) 2、指向数组的指针(P174~175) 定义格式:(*)[] 例:int(*pa)[4]//表示指针变量pa是一个指向一维整型数组的指 /针,该数组包含4个整型元素。 float A[2][41: float (pa[41: pa=A//则pa指向A[o] 3、指针数组 定义格式:*[] 例:(P175) int a,b, C,d A[2][4]; int *p1[4]=t&a, &b, &c, &di *2「21=A「0TAT111
第六章 指针、引用与动态内存分配 6.2.3 指针与数组 1、指向数组元素的指针(P.174.) 2、指向数组的指针(P.174~175.) 定义格式:(*)[] 例:int (*pa)[4];//表示指针变量pa是一个指向一维整型数组的指 //针,该数组包含4个整型元素。 float A[2][4]; float (*pa)[4]; pa=A; //则pa指向A[0] 3、指针数组 定义格式: *[] 例: (P.175.) int a,b,c,d,A[2][4]; int *p1[4]={&a,&b,&c,&d}; int *p2[2]={A[0],A[1]}
第六章指针、引用与动态内存分配 624字符串指针 1、说明与初始化(P176.) 例:char*pc2=“ World”; char as[10]=“ Chinese”; char * pc3=asi 2、字符串的整体输入输出(P176~177 格式:cin>> cout≤ 3、字符串指针数组(P177 4、字符串的标准函数(P.177) 例:(P178) 625指针与函数 1、指针作函数参数(P179~180.) 2、函数返回指针(P180
第六章 指针、引用与动态内存分配 6.2.4 字符串指针 1、说明与初始化(P.176.) 例:char *pc2=“World”; char as[10]=“Chinese”; char *pc3=as; 2、字符串的整体输入输出(P.176~177.) 格式:cin >> cout 3、字符串指针数组(P.177.) 4、字符串的标准函数(P.177.) 例: (P.178.) 6.2.5 指针与函数 1、指针作函数参数(P.179~180.) 2、函数返回指针(P.180.)
第六章指针、引用与动态内存分配 3、函数指针(P180~181) 注:函数有类型,即返回值类型;函数也有地址,称为入口地址。 函数指钍:函数的地址。 定义格式:(*)() 例:intf1(foat int f2(char); int f3(float) int f4( float) int(*pf(foat)=&f1://合法 int(*p1)(char)&1;//不合法 pf=&f4;//合法 pf=&f2;//不合法 63指针与动态内存分配 631动态分配运算符(new、 delete)
第六章 指针、引用与动态内存分配 3、函数指针(P.180~181.) 注:函数有类型,即返回值类型;函数也有地址,称为入口地址。 函数指针:函数的地址。 定义格式:(*)() 例:int f1(float); int f2(char); int f3(float); int f4(float); int (*pf)(float)=&f1;//合法 int (*pf1)(char)&f1;//不合法 pf=&f4; //合法 pf=&f2; //不合法 ◼ 6.3 指针与动态内存分配 6.3.1 动态分配运算符(new、delete)