资源描述:
《C语言程序设计教学课件作者第2版chap08_指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Chap8指针8.1寻找保险箱密码8.2角色互换8.3冒泡排序8.4电码加密8.5任意个整数求和*本章要点变量、内存单元和地址之间是什么关系?如何定义指针变量,怎样才能使用指针变量?什么是指针变量的初始化?指针变量的基本运算有哪些?如何使用指针操作所指向的变量?指针作为函数参数的作用是什么?如何使用指针实现函数调用返回多个值?如何利用指针实现内存的动态分配?8.1寻找保险箱密码一个关于国安局特工寻找保险箱密码的故事…关键点分析得到线索:地址为2170的房间内有线索提示地址:1976找到目标:地址为1976的房间取出内容:9118.1寻
2、找密码的途径分析密码存放需要一定的存储空间作为存放地,每个存放地都会有地址如果知道了存放地的名字,当然能够找到密码。但并不是每个存储空间都有名字如果不知道存放地的名字,知道该存放地的地址也能够取出密码如果连存放地的地址也不知道,但是有另外一个地方存放了该密码存放地的地址,那么找到这个地方,就能顺藤摸瓜,间接找到密码8.1密码存放示意图9111976P19762170名字P地址21701976内容1976911例8-1利用指针模拟寻找保险箱密码的过程获取密码的两种方法intmain(void){intkey=911;/*变量key用于存
3、放密码值911*/int*p_addr=NULL;/*变量p_addr是整型指针变量*/p_addr=&key;/*将key的地址赋给p_addr*//*通过变量key输出密码值*/printf("Thekeyis:%d",key);/*通过变量名key输出密码值*/printf("IfIknowthenameofthevariable,Icangetit’svaluebyname:%d",key);/*通过变量key的地址来输出密码值*/printf("IfIknowtheaddressofthevariableis:%x,
4、thenIalsocangetit’svaluebyaddress:%d",p_addr,*p_addr);return0;}IfIknowthenameofthevariable,Icangetit’svaluebyname:911IfIknowtheaddressofthevariableis:12ff7c,thenIalsocangetit’svaluebyaddress:9118.1.2地址和指针-指针的概念内存单元地址内容变量intx=20,y=1,z=155;printf("%d",x;)直接访问:通过变量名访问间接访
5、问:通过另一个变量访问把变量的地址放到另一变量中使用时先找到后者再从中取出前者的地址100020x10021y1004155z20001000p2002地址指针变量指针内存单元地址内容变量intx=20,y=1,z=155;printf("%d",x;)100020x10021y1004155z20001000p2002地址指针变量指针变量:存放地址的变量某个变量的地址指向指针变量所指向的变量的类型int*p;p是整型指针,指向整型变量float*fp;fp是浮点型指针,指向浮点型变量char*cp;cp是字符型指针,指向字符型变量类
6、型名*指针变量名指针声明符8.1.3指针变量的定义指针变量的定义类型名*指针变量名int*p;指针变量名是p,不是*p*是指针声明符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指针变
7、量的类型和它所指向变量的类型相同#includeintmain(void){inta=3,*p;p=&a;printf(“a=%d,*p=%d”,a,*p);*p=10;printf("a=%d,*p=%d",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=
8、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相同,是变量(