资源描述:
《chap08_指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Chap8指针8.1寻找保险箱密码8.2狸猫换太子8.3冒泡排序8.4加密变换问题8.5任意个整数求和问题*本章要点变量、内存单元和地址之间是什么关系?如何定义指针变量,怎样才能使用指针变量?什么是指针变量的初始化?指针变量的基本运算有哪些?如何使用指针操作所指向的变量?指针作为函数参数的作用是什么?如何使用指针实现函数调用返回多个值?如何利用指针实现内存的动态分配?8.1寻找保险箱密码一个关于特工008寻找保险箱密码的故事…关键点分析得到线索:0217单元的“虎跑号”寄存箱提示地址:1976单元找到目标:“龙井号”寄存箱取出内容:9118.1寻找密码的途径分析密码911存放在某个寄
2、存箱内,如果我们知道这个寄存箱的名字,就能够找到密码如果不知道密码所在的寄存箱名字,知道该寄存箱的地址也照样能够取出密码如果寄存箱的地址也不知道,但是有另外一个地方存放这个寄存箱的地址,就能顺藤摸瓜,间接找到密码8.1密码存放示意图龙井号9111976虎跑号19760217名字虎跑号龙井号地址02171976内容1976911例8-1利用指针模拟寻找保险箱密码的过程获取密码的两种方法intmain(void){intkey=911;/*变量key存放密码*/int*addr=NULL;/*变量addr存放地址*/addr=&key;/*将key的地址赋给addr*//*通过变量key
3、输出密码值*/printf("Thekeyis:%d",key);/*通过变量key的地址来输出密码值*/printf("IfIknowtheaddressofthekey,Ialsocangetit:%d",*addr);return0;}Thekeyis:911IfIknowtheaddressofthekey,Ialsocangetit:9118.1.2地址和指针-指针的概念内存单元地址内容变量intx=20,y=1,z=155;printf("%d",x;)直接访问:通过变量名访问间接访问:通过另一个变量访问把变量的地址放到另一变量中使用时先找到后者再从中取出前者的地
4、址100020x10021y1004155z20001000p2002地址指针变量指针内存单元地址内容变量intx=20,y=1,z=155;printf("%d",x;)100020x10021y1004155z20001000p2002地址指针变量指针变量:存放地址的变量某个变量的地址指向指针变量所指向的变量的类型int*p;p是整型指针,指向整型变量float*fp;fp是浮点型指针,指向浮点型变量char*cp;cp是字符型指针,指向字符型变量类型名*指针变量名指针声明符8.1.3指针变量的定义指针变量的定义类型名*指针变量名int*p;指针变量名是p,不是*p*是指针声明符
5、intk,*p1,*p2;等价于:intk;int*p1;int*p2;8.1.4指针的基本运算*间接访问运算符,访问指针所指向的变量*p:指针变量p所指向的变量a3&ap*p如果指针的值是某个变量的地址,通过指针就能间接访问那个变量。1、取地址运算和间接访问运算&取地址运算符,给出变量的地址int*p,a=3;p=&a;把a的地址赋给p,即p指向a指针变量的类型和它所指向变量的类型相同#includeintmain(void){inta=3,*p;p=&a;printf(“a=%d,*p=%d”,a,*p);*p=10;printf("a=%d,*p=%d
6、",a,*p);printf("Entera:");scanf("%d",&a);printf("a=%d,*p=%d",a,*p);(*p)++;printf("a=%d,*p=%d",a,*p);return0;}例8-2指针取地址运算和间接访问运算a3&ap*pa=3,*p=3a=10,*p=10Entera:5a=5,*p=5a=6,*p=6a3&ap*p(1)当p=&a后,*p与a相同(2)int*p;定义指针变量p*p=10;指针p所指向的变量,即a(3)&*p与&a相同,是地址*&a与a相同,是变量(4)(*p)++等价于a++将p所指向的变量值加1*p++等价
7、于*(p++)先取*p,然后p自加,此时p不再指向a说明inta=1,x,*p;p=&a;x=*p++;b2&bp2*p2a1&ap1*p121#includeintmain(void){inta=1,b=2,t;int*p1,*p2;p1=&a;p2=&b;printf("a=%d,b=%d,*p1=%d,*p2=%d",a,b,*p1,*p2);t=*p1;*p1=*p2;*p2=t;printf("a=%d,b=%d,*p1=%