c语言程序设计(王勇)第8章指针.ppt

上传人:wuy****n92 文档编号:70107031 上传时间:2023-01-16 格式:PPT 页数:22 大小:385.50KB
返回 下载 相关 举报
c语言程序设计(王勇)第8章指针.ppt_第1页
第1页 / 共22页
c语言程序设计(王勇)第8章指针.ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《c语言程序设计(王勇)第8章指针.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计(王勇)第8章指针.ppt(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第八章 指针C程序设计中使用指针可以:使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值8.1 变量的地址和指针程序中:short i;float k;内存中每个字节有一个编号-地址.2000200120022005内存02003ik 编译或函数调用时为其分配内存单元变量与内存中某存储空间具有对应关系变量实质上是代表了“内存中的某个存储单元指针与指针变量v指针:一个变量的地址v指针变量:专门存放变量地址的变量叫指针指针变量 变量的地址2000200420062005200120022003 变量的内容短整型变量i变量ip10.2000指针变量变量变量地址(指针)

2、变量值指向地址存入指针变量例:short i=10,*ip;&取变量地址与指针变量运算有关的两个运算符*取指针变量所指向单元的值互为逆运算例:int i=10;i204820492050205110若:int *p=&i;&ip20482048*p10直接访问与间接访问v直接访问:按变量地址存取变量值v间接访问:通过存放变量地址的变量去访问变量例 i=3;-直接访问指针变量.2000200420062005整型变量i10变量ip20012002200320003例 *ip=20;-间接访问208.2 指针变量的定义和指针变量的基类型指针变量的定义一般形式:存储类型 数据类型 *指针名;合法标识

3、符指针变量本身的存储类型指针的目标变量的数据类型表示定义指针变量不是*运算符例 int*p1,*p2;float *q;static char *name;注意:1、int *p1,*p2;与 int *p1,p2;2、指针变量名是p1,p2,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,用前须先赋值8.3 指针变量的赋值例 int i;int *p=&i;变量必须已说明过类型应一致例 int *p=&i;int i;例 int i;*p=&i;int *q=p;例 main()int i;static int *p=&i;()存储类型也应一致不

4、能用auto变量的地址去初始化static型指针初始化:用已初始化指针变量作初值注意类型的匹配例 main()int i=10;int *p;*p=i;printf(“%d”,*p);危险!例 main()int i=10,k;int *p;p=&k;*p=i;printf(“%d”,*p);指针变量必须先赋值,再使用例 输入两个数,并使其从大到小输出main()int*p1,*p2,*p,a,b;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)p=p1;p1=p2;p2=p;printf(a=%d,b=%dn,a,b);printf(max=%d,min=%dn,*

5、p1,*p2);main()int*p1,*p2,*p,i1=10,i2=20;p1=&i1,p2=&i2;printf(“%d,%dn”,*p1,*p2);p=p1;p1=p2;p2=p;printf(“%d,%dn”,*p1,*p2);main()int*p1,*p2,i1=10,i2=20,i;p1=&i1;p2=&i2;printf(“%d,%dn”,*p1,*p2);i=*p1;*p1=*p2;*p2=i;printf(“%d,%dn”,i1,i2);零指针与空类型指针零指针:v定义:指针变量值为零v表示:int *p=0;#define NULL 0int *p=NULL:void

6、 *类型指针v表示:void *p;v使用时要进行强制类型转换例 char *p1;void *p2;p1=(char *)p2;p2=(void*)p1;指针变量的赋值运算vp=&a;(将变量a地址p)vp=array;(将数组array首地址p)vp=&arrayi;(将数组元素地址p)vp1=p2;(指针变量p2值p1)v不能把一个整数p,也不能把p的值整型变量如 int i,*p;p=1000;()i=p;()指针变量与其指向的变量具有相同数据类型8.4 指针的运算指针的算术运算:1.p+,p-,p+i,p-i,p+=i,p-=i等2.p1与p2指向同一数组,p1-p2=两指针间元素个

7、数3.p1+p2 无意义a0a1a2a3a4a5a6a7a8a9a数组pp+1,a+1p+i,a+ip+9,a+91指针变量的关系运算若p1和p2指向同一数组,则vp1p2 表示p1指的元素在后vp1=p2 表示p1与p2指向同一元素若p1与p2不指向同一数组,比较无意义p=NULL或p!=NULL例 void main()int a=5,8,7,6,2,7,3;int y,*p=&a1;y=(*-p)+;printf(“%d ”,y);printf(“%d”,a0);输出:5 6pp58762730123456a例 注意指针变量的运算6y先将5赋给ymain()int i,*p,a7;p=a

8、;for(i=0;i7;i+)scanf(%d,p+);printf(n);for(i=0;i7;i+,p+)printf(%d,*p);例 注意指针的当前值p=a;pp58762730123456apppppp指针变量可以指到数组后的内存单元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,%dn,a,b);传值特点:共享内存,“双向”传递8.5 函数之间地址值的传递swap(int *p1,int *p2)int p;p=*p1;*p

9、1=*p2;*p2=p;指针做函数参数main()int a,b;int*p1,*p2;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)swap(p1,p2);printf(n%d,%dn,a,b);swap(int *p1,int *p2)int p;p=*p1;*p1=*p2;*p2=p;main()int a,b;int*p1,*p2;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)swap(p1,p2);printf(n%d,%dn,a,b);swap(int*p1,int*p2)int*p;*p=*p1;*p1=*p2;*p2=*p

10、;main()int a,b;int*p1,*p2;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)swap(p1,p2);printf(n%d,%dn,a,b);编译警告!结果不对!int x;int *p=&x;x;swap(int x,int y)int t;t=x;x=y;y=t;main()int a,b;int*p1,*p2;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)swap(*p1,*p2);printf(n%d,%dn,a,b);传指针并交换指针指向swap(int*p1,int*p2)int*p;p=p1;p1=p2;p2=p;main()int a,b;int*p1,*p2;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)swap(p1,p2);printf(%d,%d,*p1,*p2);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com