- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 地址和指针 问题的引入 使用指针有如下好处: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态的分配地址 得到多于一个的返回值 int a=3; 1101 afff 地址表示 a 3 指针 7.1 地址和指针的概念 计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就称为内存的地址。 如果程序中定义了一个变量,C语言的编译系统就会根据定义中的变量,为其分配一定字节数的内存单元 例如: char ch = A; int i = 5; float f = 3.8; 指针变量 指针变量的定义 int i,j, *p; int i=3 , *p; p=i; i j p 变量的值 存放的是地址 i 3 p i 指针变量的引用 假设有如下定义: int i=3 , a , *p; p=i; printf(%p,p); p=a; scanf(%d,p); printf(%d,*p); scanf(%d,a); printf(%d,a); *p=5; i a p 3 i a 8 5 main() { int i,j,*p,*q; scanf(%d,%d,i,j); p=i; q=j; printf(%p,%p\n,i,p); printf(%p,%p\n,j,q); printf(%d,%d\n,i,*p); printf(%d,%d\n,j,*q); q=p; printf(%d,%d\n,*p,*q); printf(%d,%d\n,i,j); } 【例7.1】 下面的程序是指针变量的引用,请认真体会引用的方法 i j p q 3 5 i j i 【例7.2】从键盘输入a和b两个整数,按照从大到小的顺序输出排序后的结果。 main() { int a=5,b=9; int p,*pa,*pb; printf(%d,%d\n,a,b); pa=a; pb=b; if(*pa*pb) { p=*pa;*pa=*pb;*pb=p;} printf(%d,%d\n,*pa,*pb); } swap(int x,int y) { int temp; temp=x; x=y; y=temp;} main() { int a,b; scanf(%d,%d,a,b); if(ab) swap(a,b); printf(\n%d,%d\n,a,b); } COPY (main) a b 9 5 (swap) x y temp 9 5 9 5 5 例 将数从大到小输出 问题的提出 swap(int x,int y) { int temp; temp=x; x=y; y=temp;} main() { int a,b; scanf(%d,%d,a,b); if(ab) swap(a,b); printf(\n%d,%d\n,a,b); } 运行结果:5, 9 值传递 (main) a b 9 5 问题的提出 例 将数从大到小输出 swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p;} main() { int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,a,b); pointer_1=a; pointer_2=b; if(ab)swap(pointer_1,pointer_2); printf(\n%d,%d\n,a,b);} (main) a b pointer_1 pointer_2 5 9 2000 2002 (swap) p p1 p2 2000 2002 5 9 5 例 将数从大到小输出 swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p;} main() { int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,a,b); pointer_1=a; pointer_2=b; if(ab)swap(pointer_1,pointer_2); printf(\n%d,%d\n,a,b);} p (main) a b pointer_1
您可能关注的文档
- 《AutoCAD网络工程设计教程》任务1.1AutoCAD简介及基础设置.pptx
- 《AutoCAD网络工程设计教程》任务1.2直角坐标系统.pptx
- 《AutoCAD网络工程设计教程》任务1.3极坐标系统.pptx
- 《AutoCAD网络工程设计教程》任务2.1直线的绘制.pptx
- 《AutoCAD网络工程设计教程》任务2.2点的绘制.pptx
- 《AutoCAD网络工程设计教程》任务2.3多段线的绘制.pptx
- 《AutoCAD网络工程设计教程》任务2.4射线、构造线的绘制.pptx
- 《AutoCAD网络工程设计教程》任务2.5多线的绘制.pptx
- 《AutoCAD网络工程设计教程》任务2.6矩形的绘制.pptx
- 《AutoCAD网络工程设计教程》任务2.7正多边形的绘制.pptx
原创力文档


文档评论(0)