任务9 指针的使用



《任务9 指针的使用》由会员分享,可在线阅读,更多相关《任务9 指针的使用(13页珍藏版)》请在装配图网上搜索。
1、,,任务9 指针的使用,目 录,上一页,下一页,返 回,VC++,1,1、掌握指针变量的定义,能正确引用指针变量,确定指针变量的指向;,,2、掌握&和*运算符的使用及指针运算;,,3、掌握指针作为函数参数的几种形式,能利用指针编写函数解决实际问题;,,4、掌握使用指针处理数组及字符串的方法;,,5、了解返回指针值的函数和main()函数的参数。,教 学 目 标,任务9-1,,指针变量的定义与使用,,一、指针与指针变量,,1、获取变量的取地址,,①变量的地址——指针,:系统根据变量的数据类型为其分配相应长度的存储空间,变量的存储空间在内存中的起始地址称为这个变量的地
2、址,也称为指针。,,②取地址运算的一般形式,:&变量名,,其中&是取地址运算符,是单目运算,右结合。,,功能,:取其后变量的地址。,,2、访问变量的两种方式,,1,),直接访问,:通过变量名或变量的地址来访问变量的方式称为直接访问。,,2,),间接访问,:把一个变量的地址存放到另一个变量中,通过对另一个变量的访问来访问这个变量,这种访问变量的方式称为间接访问。,2,例如:printf("%d",a);/*通过,变量名,*/,,scanf("%d",&a);/*通过变量的,地址,*/,物品,钥匙,一个抽屉,另一个抽屉,2,2,3、指针变量,,①指针变量,:把存放地址的变量称为指针变量。指针变量的
3、值为地址即指针。,,②指向,:如果指针变量p中存放的是变量a的地址,即指针变量p的值为变量a的地址,则称变量p指向变量a。,,二、指针变量的定义,,1、一般形式,,[存储类别] 数据类型 *指针变量名;,,2、说明,,①存储类别规定了指针变量的存储类别;,,②,数据类型规定了指针变量所能指向的变量的类型,称为指针变量的,基类型,;,,③*表示后面的变量是指针变量,这是与普通变量定义的区别,。,3,返 回,例如:int *p;,,p为指针变量,它的基类型为int,三、确定指针变量的指向,,指针变量定义后,,必须确定指针变量的指向。,,1,、,给,指针变量赋值,;,,2,、,给,指针变量初始
4、化,;,,3,、,给指针变量赋空值,。,,四、指针运算符,,一般形式,: *指针变量,,其中*为指针运算符,优先级别和结合方向与,&,相同。,,作用,:求指针变量所指向的变量的值,即指针变量所指向的内存单元的内容。,,说明,,1,)如果,int,a,*p=&a,;,则,*,p,与,a,等价,即,*,p,也是一个变量,就是,p,所指向的变量;,,2,)*与,&,互为逆运算;,,3,),运算符“,*,”后面必须是指针变量,而不能是普通变量。,,例如:int a,b[5],*p,*q,*r,*s; float *t;,,p=/*,确定p指向变量a,*/,,t= /*,t的基类型与a不同,*/,×,,
5、q=b; /*,确定q指向数组b,相当于q=&b[0],*/,,r=a; /*,把a的值赋给r,*/,×,,r=p;,,/*,确定r指向p指向的变量a,*/,,s=1000; /*,把1000赋给s,*/,×,,s= /*,确定s指向数组元素b[2],*/,,t=s; /*,t与s的基类型不同,*/,×,例如: int a,*p=,√,,相当于:int a,*p; p=,,int *p=,×,,,int a[3],*p=a,*q=,√,,相当于:,int a[3],*p,*q;p=a; q=,,int a,*p,*q=p;,×,,,int a,*p=,×,例如: int a=3,*p=,
6、,printf("%d,%d",a,*p);,,输出结果为:3,3,,说明 *p与a 等价,如果,int a,*p=,,则,*&a,==*(&a)==*p==,a,,,&*p,==&(*p)==&a==,p,。,,即*&a==a,&*p==p,。,,4,4,4,4,4,例如:int *p;,,p=,NULL,;(或p=,0,;),,其中,NULL,是一个符号常量,代表整数0,在stdio.h中定义。,,此时,p是一个,空指针,,,不指向任何单元,。,,注,:不能将一个非零数值赋给指针变量。,4,5,5,5,5,五、指针变量的引用,,1,、,引用指针变量指向的变量,;,,2,、,直接引用指针变量
7、,。,,例1,两个指针变量指向同一变量。,,例2,交换两个指针变量的指向。,,例3,交换两个指针变量所指向的变量的值。,,六、指针运算,,1,、对指向单元的相邻单元操作,指针不移动;,,一般形式:指针变量+整型常量 指针变量-整型常量,,2,、移动指针(指针自增或自减),,一般形式:后缀形式:指针变量++ 指针变量-- 前缀形式: ++指针变量 --指针变量,,注:加向后移动,减向前移动。后缀形式:“,先引用,后移动,”;前缀形式:“,先移动,后引用,”。,,例4,指针变量作为循环变量向数组输入数据。,例如:int a=3,b=2,*p
8、;,,p=,,a=a+b;,,printf("%d,%d\n",a,*p);,,输出结果为:5,5,例3,交换两个指针变量所指向的变量的值。,,程序:,,#include "stdio.h ",,void,,main(),,{int *p1,*p2,a,a1=10,a2=20;,,p1=,,printf("%d,%d\n",*p1,*p2);,,a=*p1;*p1=*p2;*p2=a;,,printf("%d,%d\n",*p1,*p2);,,printf("%d,%d\n",a1,a2);,,},,输出结果:10,20,,20,10,,20,10,例2,交换两个指针变量的指向。,程序:,,#
9、include "stdio.h ",,void main(),,{int *p1,*p2,*p,a1=10,a2=20;,,p1=,,printf("%d,%d\n",*p1,*p2);,,p=p1;p1=p2;p2=p;,,printf("%d,%d\n",*p1,*p2);,,printf("%d,%d\n",a1,a2);,,},,输出结果: 10,20,,20,10,,10,20,例1,两个指针变量指向同一变量。,,程序:,,#include "stdio.h ",,void main(),,{int *p1,*p2,a1,a2;,,scanf("%d,%d",,,p1=,,prin
10、tf("%d,%d\n",*p1,*p2);,,p2=p1;,,printf("%d,%d\n",*p1,*p2);,,},,运行情况:,10,20,↙,,10,20,,10,10,例如: char a[]="ABC",*p=a;,,printf("%s",p);,,输出结果为:ABC,例如: int a=3,*p=,,printf("%u",p);,,输出为变量a的地址,5,5,5,例如:int a[7]={1,3,5,7,9,11,13},*p;,,p=,,printf("%3d",*(p++));,,printf("%3d",*p++);,,printf("%3d",(*p)++);,,
11、printf("%3d",*(++p));,,printf("%3d",*++p);,,printf("%3d\n", ++*p);,,输出结果为:5 7 9 11 13 14,例如:int a[5]={1,3,5,7,9},*p;,,p=,,printf(,“,%2d,”,,*p);,,printf(,“,%2d,”,,*(p+1));,,printf(,“,%2d,”,,*(p-2));,,printf(,“,%2d,”,,*p-1);,1000,1002,1004,1006,1008,1,3,5,7,9,,p,,p+1,,p-1,,p+2,,p-2,a[0],a[1],a[2],a[
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。