指针-PPT课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《指针-PPT课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 PPT 课件
- 资源描述:
-
1、指针1第九章第九章 指针指针指针与指针变量指针与函数指针与数组指针数组29.1 指针与指针变量一一基本概念基本概念q 指针是一种数据类型指针是一种数据类型整数型整数型 int 基本类型基本类型实数型实数型 float,double字符型字符型 char 指针类型指针类型数据类型数据类型数组型数组型 构造类型构造类型结构型结构型 struct联合型联合型 union枚举型枚举型 enum 空类型空类型 void数据结构、表示范围、存储分配数据结构、表示范围、存储分配39.1 指针与指针变量q 指针是一个地址指针是一个地址是是变量变量在内存中所在内存中所对应存储单元的对应存储单元的地址地址变量变量
2、的四个属性的四个属性n 变量变量名称名称n 变量变量数据类型数据类型n 变量变量值值n 变量变量地址地址char c=a;?49.1 指针与指针变量变量的变量的地址地址n多数现代计算机用字节多数现代计算机用字节(byte)来分割内存,每来分割内存,每个字节可以存储个字节可以存储8位位(bit)信息;信息;n每个字节都有唯一的地每个字节都有唯一的地址址(address) 。010001110110111101101111011001000100001101000011n-1地址地址内容内容59.1 指针与指针变量n程序运行时,要将变量的程序运行时,要将变量的值值保存在计算机的保存在计算机的存储单
3、元中,每个变量占有一个或多个内存存储单元中,每个变量占有一个或多个内存字节,把字节,把第一个字节第一个字节的地址称为变量的地址。的地址称为变量的地址。1000char c=a;变量变量c地址为地址为1000float f=1.6;变量变量f地址为地址为200020002001变量变量f变量变量ca2002200369.1 指针与指针变量q 指针变量是存放地址的变量指针变量是存放地址的变量n指针变量指针变量pc是是char型指针型指针;它的值为;它的值为1000H,即变量即变量c的地址,或称指针变量的地址,或称指针变量pc指向变量指向变量c;pc拥有自己的内存地址。拥有自己的内存地址。1000H
4、char c;变量变量ca1001H1000H变量变量pc3000Hchar * pc;pc = &c;c = a;79.1 指针与指针变量mark0mark1mark2mark3.mark9986.592.077.552.0.94.02000H2004H2008H200CH.218CHfloat mark100float mark100;p=mark;p=&mark0;n 指针变量指针变量p是是float型型指针指针;它的值为;它的值为2000H,即数组,即数组mark的首地址,也是元素的首地址,也是元素(变量变量)mark0的地址的地址float *p;等等价价89.1 指针与指针变量 指
5、针变量与地址常量指针变量与地址常量int a3=1,2,3,b,*p;p=a;scanf(“%d”,&b);p=&b;la是数组名,是数组的首地址,是一个地址常是数组名,是数组的首地址,是一个地址常量;量;&b是取是取b的地址,也是地址常量;的地址,也是地址常量;lp是一个指针变量,它可以用来存放地址是一个指针变量,它可以用来存放地址它是一个容器。它是一个容器。99.1 指针与指针变量小结小结q 指针指针:变量的地址:变量的地址q 一般变量一般变量:存储变量的值:存储变量的值q 指针变量指针变量:存储变量地址:存储变量地址q 请注意指针变量与地址常量的区别请注意指针变量与地址常量的区别109.
6、1 指针与指针变量二二指针变量的定义与赋初值指针变量的定义与赋初值 数据类型数据类型 * 指针变量名指针变量名 =初值初值 ;例如:例如:int a,*pa; pa=&a;指针的类型,是指针的类型,是指针所指的变量指针所指的变量的类型的类型*为指针说明符,说明后为指针说明符,说明后面的标识符为指针变量面的标识符为指针变量(它也是它也是间接访问符间接访问符)指针变量是变量,要先定指针变量是变量,要先定义,再赋值,再使用!义,再赋值,再使用!119.1 指针与指针变量q为指针变量赋初值为指针变量赋初值n使用赋值语句使用赋值语句int a, * pa; /* * 说明变量说明变量a和指针变量和指针变
7、量pa * */pa=&a; /* * 将变量将变量a的地址赋给指针的地址赋给指针pa * */n变量说明同时赋初值变量说明同时赋初值 int a, * pa=&a;12三三引用指针变量引用指针变量l&取地址运算符取地址运算符l*指针内容运算符指针内容运算符(间接存取运算符间接存取运算符)int x=10, * p, y;p=&x; /* * 取变量取变量x的地址赋给指针变量的地址赋给指针变量p * */y=*p; /* * 取指针变量取指针变量p所指所指单元单元的内容赋给变量的内容赋给变量y * */有类型说明符的作用有类型说明符的作用运算符运算符p自动取两个自动取两个(或或4个个)字节的内
8、容给字节的内容给y139.1 指针与指针变量变量的两种访问方式变量的两种访问方式直接访问直接访问:通过变量名访问该变量通过变量名访问该变量。间接访问间接访问:通过指针变量中存放的地址访问该变量通过指针变量中存放的地址访问该变量。int a=10;printf(“%dn”,a); /*通过访问变量通过访问变量a,输出输出a的值的值*/int a=10,*p=&a;printf(“%dn”,*p); /*通过通过p间接访问间接访问a并输出并输出a值值*/149.1 指针与指针变量v 练习:已知练习:已知int a,*p=&a; 若给若给a赋值或输赋值或输出,下面语句正确的是:出,下面语句正确的是:
9、A) scanf(“%d”,a);B) scanf(“%d”,p);C) scanf(“%d”,&a);D) printf(“%d”,a);E) printf(“%d”,p);F) printf(“%d”,*p);159.1 指针与指针变量 例:例:已知:已知:int x=2, y, *px; x为一般变量,为一般变量,px为指针型变量为指针型变量px px=&x; *px=10;x210 x = 10; *px *(&x) x169.1 指针与指针变量 y=x * 100; *px=y*10; +x; x+; pxx210 y = *px; y = *px * 100; x = y * 10
10、; + * px; (* px)+; 括号不能省略括号不能省略 y=x; 17 基本运算辨析基本运算辨析int x=10, y=5, *p=&x, *q=&y;px210qy25p = q;为指针为指针p赋值,使赋值,使p和指针和指针q指向同一单元指向同一单元qy25p*p = *q; 为指针为指针p的内容赋值,使的内容赋值,使*p和和*q的值相同的值相同qy25px2105189.1 指针与指针变量u 思考:哪些是正确的?思考:哪些是正确的?int a=1,*pa;*pa=a;int a=1,*pa=&a;int a=1,*pa;pa=&a;指针变量是变量,要先赋值,再使用!指针变量是变量,
11、要先赋值,再使用! int a=1,*pa;*pa=&a; 199.1 指针与指针变量指针可以指向所有类型的数据指针可以指向所有类型的数据q指针指向指针指向变量变量-变量的指针变量的指针(存变量的地址存变量的地址)q指针指向指针指向数组数组-数组指针数组指针(存数组的起始地址存数组的起始地址)q指针指向指针指向函数函数-函数指针函数指针(存放函数的入口地址存放函数的入口地址)q指针指向指针指向指针指针-指针型指针指针型指针(存放某指针的地址存放某指针的地址)q由指针组成的数组由指针组成的数组-指针数组指针数组q指针指向指针指向结构结构q指针指向指针指向文件文件 指针是定位其它对象的特殊类型的数
12、据。指针是定位其它对象的特殊类型的数据。20第九章第九章 指针指针指针与指针变量指针与函数指针与数组指针数组219.2 指针与函数三个方面:三个方面:q 指针作为函数的参数指针作为函数的参数q 函数返回指针函数返回指针q 指向函数的指针指向函数的指针多用于字符串操作多用于字符串操作229.2 指针与函数一一指针作为函数的参数指针作为函数的参数用指针在函数之间用指针在函数之间“传递传递”地址,做到地址,做到共享存储。共享存储。必须满足:实参和形参应是同类型的指必须满足:实参和形参应是同类型的指针或指针变量。针或指针变量。23 例:交换例:交换int swap (int x, int y) int
13、 t; t=x; x=y; y=t; printf(“swap:x=%d,y=%dn”,x,y); return ; int main( ) int x=2, y=3; printf(“before:x=%d,y=%dn”,x,y); swap (x, y); printf(“after:x=%d,y=%dn”,x,y); 输出:输出:before: x=2,y=3swap:x=3,y=2after:x=2,y=3值传递,主函数中值传递,主函数中x,y值未交换值未交换24用指针完成两数的交换用指针完成两数的交换int swap (int *px, int *py) int t; t=*px;
14、*px=*py; *py=t; printf(“swap:x=%d,y=%dn”,*px,*py); return ; int main( ) int x=2, y=3; printf(“before:x=%d,y=%dn”,x,y); swap (&x, &y); printf(“after:x=%d,y=%dn”,x,y);输出:输出:before:x=2,y=3 swap:x=3,x=2after:x=3,y=2由于指针变量由于指针变量px接受的是接受的是x的地的地址,所以址,所以*px就是就是x。地址传递,主函数中地址传递,主函数中x,y值交换值交换25 数组名、指针、形参、实参数组名
15、、指针、形参、实参q在函数之间传递数组,数组名可以作函数的在函数之间传递数组,数组名可以作函数的实参和形参,指针也可以做函数的实参和形实参和形参,指针也可以做函数的实参和形参,对应关系有以下参,对应关系有以下4种:种:1. 形参和实参都用数组名;形参和实参都用数组名;2. 实参用数组名,形参用指针变量;实参用数组名,形参用指针变量;3. 实参、形参都用指针变量;实参、形参都用指针变量;4. 实参为指针变量,形参为数组名;实参为指针变量,形参为数组名;q在函数之间传递数组,当形参使用指针时,在函数之间传递数组,当形参使用指针时,在被调用函数的内部,就可用指针方式访问在被调用函数的内部,就可用指针
16、方式访问数组中的元素。数组中的元素。26fun(char str ) main() char s10=“abc”; fun(s); fun(char *str) main() char s10=“abc”; fun(s); fun(char str ) main() char a8,*s=a; fun(s);fun(char * str) main() char a8,*s=a; fun(s);279.2 指针与函数一一函数返回指针函数返回指针 即函数的返回值是指针类型,这样的即函数的返回值是指针类型,这样的函数定义形式为:函数定义形式为:类型类型 * 函数名函数名 (形式参数表形式参数表)
17、例如:例如:int * fun (int x) 289.2 指针与函数比较比较返回返回char值:值:char min(char a10) char i,m; m=a0; for(i=1;iai) m=ai; return m; 返回返回char *(char指针指针)值值char *min(char a10) char i,*m; m=&a0; for(i=1;i10;i+) if(*my?x:y;int main( ) int c,a=15,b=12,(*p)( ); p=max; /* p指向函数指向函数max */ c=(*p)(a,b); /* 用指针用指针p调用函数调用函数 */
18、printf(“max=%dn”,c);319.2 指针与函数请区分请区分返回指针的函数返回指针的函数和和指向函数的指指向函数的指针变量针变量:int * func( )int (* func)( );定义了一个返回定义了一个返回指针的函数指针的函数定义了一个指向定义了一个指向函数的指针变量函数的指针变量32第九章第九章 指针指针指针与指针变量指针与函数指针与数组指针数组339.3 指针与数组一一指向数组元素的指针指向数组元素的指针二二指针基本运算指针基本运算q 指针加减一个正整数指针加减一个正整数q 两个指针的关系运算两个指针的关系运算q 两个指针之间的减法运算两个指针之间的减法运算三三指向
19、数组的指针指向数组的指针(数组指针数组指针)四四字符指针与字符数组字符指针与字符数组指针数组指针数组349.3 指针与数组一一指向数组元素的指针指向数组元素的指针q定义定义 int a5,*p=a; p指针的基类型是指针的基类型是int,它可以指向,它可以指向int型数组型数组元素。通过赋初值,元素。通过赋初值,p指向指向a0。a0 a1 . aia.a&a0 数组在内存中占一片连续的存储单元。用数数组在内存中占一片连续的存储单元。用数组名表示该片存储区的首地址。用下标方式引组名表示该片存储区的首地址。用下标方式引用数组元素。用数组元素。35q 用指向数组元素的指针引用一维数组元素用指向数组元
20、素的指针引用一维数组元素int a6=1,2,3,4,5,6,*p=a; a+i &ai 地址地址 *(a+i) ai 内容内容若若 p=a;则则 p+i &ai 地址地址 *(p+i) ai 内容内容 pi *(p+i) ai相对相对p指针当前位置移动指针当前位置移动 i 个个单元单元的内容的内容aa+1a+ia+2.aia1a2aa0.pp+1p+ip+236aa+1a+4a+2a3a1a2aa0pp+1p+2p+3a4pa+3p+2p+1a是常量,是常量,p是变量!是变量!(更灵活更快更灵活更快)pp+p-p-1数组的下标数组的下标引用引用数组的指针引用数组的指针引用数组的数组名引用数组
21、的数组名引用37int a6=1,2,3,4,5,6,*p;p=a; k=*(p+2); h=p2;*p= ? k= ? h= ?133p=a+2; k=*(p+2); h=*(p-2)+p1;*p= ? k= ? h= ?351+4=5p=a; p+=1; k=*p+; h=*+p; (*p)-; *p= ? k= ? h= ?32438q 用指向数组元素的指针引用二维数组元素用指向数组元素的指针引用二维数组元素多维数组元素在内存中线性排列:多维数组元素在内存中线性排列:b00b01b02b10b11b12指针引用指针引用*p*(p+1)*(p+2)*(p+3)*(p+4)*(p+5)指针按
22、下标引用指针按下标引用p0p1p2p3p4p5下标引用下标引用若若p=b0:pi*列数列数+j *(p+i*列数列数+j) bij399.3 指针与数组一一指向数组元素的指针指向数组元素的指针二二指针基本运算指针基本运算q 指针加减一个正整数指针加减一个正整数q 两个指针的关系运算两个指针的关系运算q 两个指针之间的减法运算两个指针之间的减法运算三三指向数组的指针指向数组的指针(数组指针数组指针)四四字符指针与字符数组字符指针与字符数组409.3 指针与数组一一指针基本运算指针基本运算1.指针加减一个正整数指针加减一个正整数int a10,*p;设设 p=&a5;若若 p+; p指向指向 ?
展开阅读全文