




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+程序设计(第3版)第6章善于使用指针与引用6.1什么是指针图6.1图6.26.2变量与指针图6.36.2.1定义指针变量图6.46.2.2引用指针变量编写程序:#includeusing namespace std;int main()int a,b;/定义整型变量a,b int pointer_1,pointer_2; /定义pointer_1,pointer_2为(int)型变量 a=100;b=10; /对a,b赋值 pointer_1=&a; /把变量a的地址赋给pointer_1 pointer_2=&b; /把变量a的地址赋给pointer_2 couta bendl; /输出a和b的值 coutpointer_1 pointer_2endl; /输出pointer_1和pointer_2的值 return 0;运行结果:100 10(a和b的值)100 10 (pointer_1和pointer_2的值)图6.5图6.6图6.7编写程序:#includeusing namespace std;int main()int p1,p2,p,a,b; cinab;/输入两个整数 p1=&a; /使p1指向a p2=&b; /使p2指向b if(ab) /如果ab就使p1与p2的值交换 p=p1;p1=p2;p2=p; /将p1的指向与p2的指向交换 couta=a b=bendl; coutmax=p1 min=p2endl; return 0;运行结果: 45 78a=45 b=78max=78 min=45图6.86.2.3用指针作函数参数编写程序: #includeusing namespace std;int main() void swap(int p1,int p2); /函数声明 int pointer_1,pointer_2,a,b; /定义pointer_1,pointer_2为int型,a,b为int型变量 cinab; pointer_1=&a; /使pointer_1指向a pointer_2=&b; /使pointer_2指向b if(ab)swap(pointer_1,pointer_2); /如果ab,使pointer_1和pointer_2互换 coutmax=a min=bendl; /a已是大数,b是小数 return 0;void swap(int p1,int p2) /函数的作用是将p1的值与p2的值交换 int temp; temp=p1; /temp是整型变量,而不是指针变量 p1=p2; p2=temp; 运行结果: 45 78(输入两个整数)max=78 min=45图6.9图6.10图6.11编写程序:#includeusing namespace std;int main() void exchange(int ,int ,int );/对exchange函数的声明 int a,b,c,p1,p2,p3; cinabc; /输入3个整数 p1=&a;p2=&b;p3=&c; /指向3个整型变量 exchange(p1,p2,p3); /交换p1,p2,p3指向的3个整型变量的值 couta b cendl; /按由大到小顺序输出3个整数void exchange(int q1,int q2,int q3) void swap(int ,int ); /对swap函数的声明 if(q1q2)swap(q1,q2); /调用swap,将q1与q2所指向的变量的值互换 if(q1q3)swap(q1,q3); /调用swap,将q1与q3所指向的变量的值互换 if(q2q3)swap(q2,q3); /调用swap,将q2与q3所指向的变量的值互换void swap(int pt1,int pt2) /将pt1与pt2所指向的变量的值互换 int temp; temp=pt1; pt1=pt2; pt2=temp;运行结果: 12 -56 8787 12 -566.3数组与指针6.3.1指向数组元素的指针图6.12编写程序:#includeusing namespace std;int main() int a10; int i; for(i=0;iai;/引用数组元素ai coutendl; for(i=0;i10;i+) coutai ; /引用数组元素ai coutendl; return 0;运行结果:9 8 7 6 5 4 3 2 1 0 (输入10个元素的值)9 8 7 6 5 4 3 2 1 0 (输出10个元素的值)6.3.2用指针变量作函数形参接收数组地址编写程序:#includeusing namespace std;int main()void select_sort(int p,int n);/函数声明 int a10,i; coutenter the originl array:endl; for(i=0;iai; coutendl; select_sort(a,10); /函数调用,数组名作实参 coutthe sorted array:endl; for(i=0;i10;i+) /输出10个已排好序的数 coutai ; coutendl; return 0;void select_sort(int p,int n) /用指针变量作形参int i,j,k,t; for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+) if(p+j)(p+k)k=j; /用指针法访问数组元素 t=(p+k);(p+k)=(p+i);(p+i)=t;图6.13运行结果:与例5.7相同。图6.136.4字符串与指针编写程序:#include using namespace std;int main() char str=I love CHINA!; coutstrendl; return 0;运行结果: I love CHINA!1. 用字符数组存放一个字符串2. 用字符串变量存放字符串3. 用字符指针指向一个字符串编写程序:#includeusing namespace std;int main() char str1=I love CHINA!,str220,p1,p2; p1=str1;p2=str2; for(;p1!=0;p1+,p2+) p2=p1; p2=0; p1=str1;p2=str2; coutstr1 is: p1endl; coutstr2 is: p2endl; return 0;运行结果:str1 is: I love CHINA!str2 is: I love CHINA!图6.146.5函数与指针图6.156.6返回指针值的函数6.7指针数组和指向指针的指针6.7.1指针数组编写程序:#includeusing namespace std;int main() void sort(char name,int n);/声明函数 void print(char name,int n); /声明函数 char name=BASIC,FORTRAN,C+,Pascal,COBOL; /定义指针数组 int n=5; sort(name,n); print(name,n); return 0;void sort(char name,int n)char temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0)k=j; if(k!=i) temp=namei;namei=namek;namek=temp; void print(char name,int n)int i; for(i=0;in;i+) coutnameiendl;运行结果:BASICCOBOLC+FORTRANPascal图6.16图6.176.7.2指向指针的指针图6.18编写程序:#includeusing namespace std;int main() char p;/定义指向字符指针数据的指针变量p char name=BASIC,FORTRAN,C+,Pascal,COBOL; p=name+2; /见图6.18中p的指向 coutpendl; /输出name2指向的字符串 coutpendl; /输出name2指向的字符串中的第1个字符 运行结果:C+C图6.196.8 const指针1. 指向常量的指针变量编写程序: #includeusing namespace std;void fun(int p)/形参是指向整型变量的指针变量p=5(p); /使p所指的变量为原值的5倍int main()int a=10; fun(&a); /用a的地址作为实参 couta endl; return 0;运行结果:502. 常指针6.9 void指针类型6.10有关指针的数据类型和指针运算的小结6.10.1有关指针的数据类型的小结表6.2有关指针变量的类型及含义6.10.2指针运算小结图6.206.11引用6.11.1什么是变量的引用图6.216.11.2引用的简单使用编写程序:#include#include/用输出格式函数setw需要用iomanip头文件using namespace std;int main()int a=10; int &b=a; /声明b是a的引用 a=aa; /a的值变化了,b的值也应一起变化 coutasetw(6)bendl; b=b/5; /b的值变化了,a的值也应一起变化coutbsetw(6)aendl;return 0;运行结果: 100100(a和b的值都是100)20 20 (a和b的值都是20)6.11.3引用作为函数参数编写程序:#includeusing namespace std;int main()void swap(int,int);/函数声明int i=3,j=5; swap(i,j); /调用函数swap couti jendl; /i和j的值未互换 return 0;void swap(int a,int b) /试图通过形参a和b的值互换,实现实参i和j的值互换int temp; temp=a; /以下3行用来实现a和b的值互换 a=b; b=temp;运行结果:35图6.22编写程序:#includeusing namespace std;int main()void swap(int ,int ); int i=3,j=5; swap(&i,&j);/实参是变量的地址 couti jendl; /i和j的值已互换 return 0;void swap(int p1,int p2) /形参是指针变量int temp; temp=p1; /以下3行用来实现i和j的值互换 p1=p2; p2=temp;图6.23编写程序:#includeusing namespace std;int main()void swap(int &,int &); int i=3,j=5; swap(i,j);/实参为整型变量 couti=i j=jendl; return 0;void swap(int &a,int &b) /形参是“引用”int temp; temp=a; a=b; b=temp;运行结果:i=5 j=3图6.24编写程序:#includeusing namespace std;int main() void sort(int &,int &,int &);/函数声明,形参是引用int a,b,c; /a,b,c是需排序的变量coutabc; /输入a,b,c sort(a,b,c); /调用sort函数,以a,b,c为实参 coutsorted order is a b cj)change(i,j); /使ik)change(i,k); /使ik)change(j,k); /使j=k void change(int &x,int &y) /使x和y互换 int temp; temp=x; x=y; y=temp;运行结果: Please enter 3 integers: 23 12 -345sorted order is -345 12 23习题本章习题要求用指针或引用方法处理。1. 输入3个整数,按由小到大的顺序输出。2. 输入3个字符串,按由小到大的顺序输出。3. 输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。写3个函数: 输入10个数; 进行处理; 输出10个数。图6.254. 有个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图6.25。写一函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数。5. 有n个人围成一圈,顺序排号。从第1个人开始报数(从13报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。6. 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。7. 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。8. 输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。9. 写一函数,将一个33的整型矩阵转置。10. 将一个55的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从左到右、从上到下顺序依次从小到大存放),写一函数实现。用main函数调用。11. 在主函数中输入10个等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。12. 用指针数组处理第11题,字符串不等长。13. 写一个用矩形法求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论