第八章指针课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第八章指针课件.ppt》由会员分享,可在线阅读,更多相关《第八章指针课件.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计语言程序设计1第八章第八章-指针指针C语言程序设计语言程序设计2 1 1、指向变量的指针、指向变量的指针 2 2、指向数组的指针、指向数组的指针 3 3、指向字符串的指针、指向字符串的指针 4 4、指向函数的指针、指向函数的指针6 6、二维指针、二维指针 7 7、返回指针值的函数、返回指针值的函数 5 5、指针数组、指针数组主要内容主要内容C语言程序设计语言程序设计3 地址和指针的概念地址和指针的概念 在计算机中,所有的数据都是存放在存储器中。一般把在计算机中,所有的数据都是存放在存储器中。一般把存储器中的一个字节称为一个内存单元存储器中的一个字节称为一个内存单元, 不同的数据类
2、型所不同的数据类型所占用的内存单元数不等占用的内存单元数不等. 为了正确地访问这些内存单元,为了正确地访问这些内存单元, 必须为每个内存单必须为每个内存单元编号。元编号。 根据一个内存单元的编号即可准确地找到该内存单根据一个内存单元的编号即可准确地找到该内存单元。元。内存单元的编号也叫做地址。内存单元的编号也叫做地址。 通常也把这个通常也把这个地址称为指地址称为指针。针。 1、地址:内存单元的编号,通常一个字节(、地址:内存单元的编号,通常一个字节(1B)一个编号。一个编号。 2、指针:内存单元的地址。、指针:内存单元的地址。C语言程序设计语言程序设计43、内存单元的指针和内存单元的内容、内存
3、单元的指针和内存单元的内容4、内存数据的访问方式:、内存数据的访问方式: (1)直接访问)直接访问按变量名存取变量按变量名存取变量 (2)间接访问)间接访问将变量的地址存放在另一个变量(指针将变量的地址存放在另一个变量(指针变量),通过指针变量来访问。变量),通过指针变量来访问。.30 50 60变量i变量j变量k2000200420022000指针变量 ip 在语言中,在语言中, 允许用一个变量来允许用一个变量来存放指针,这种变存放指针,这种变量称为量称为指针变量指针变量。一个指针变量的值一个指针变量的值就是某个内存单元就是某个内存单元的地址或称为某内的地址或称为某内存单元的指针。存单元的指
4、针。 地址地址C语言程序设计语言程序设计5 注意:注意:严格地说,一个指针是一个地址,严格地说,一个指针是一个地址, 是一个常量。是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。而一个指针变量却可以被赋予不同的指针值,是变量。 但经但经常把指针变量简称为指针。为了避免混淆,我们中约定:常把指针变量简称为指针。为了避免混淆,我们中约定:“指针指针”是指地址,是指地址, 是常量,是常量,“指针变量指针变量”是指取值为地址是指取值为地址的变量的变量。 定义指针变量的目的是为了通过指针去访问内存单定义指针变量的目的是为了通过指针去访问内存单元。元。C语言程序设计语言程序设计6指向变量的指针
5、变量变量的指针变量的指针变量的地址变量的地址例:例:&a 为变量为变量a在内存单元的存放地址,也称变量在内存单元的存放地址,也称变量a的指针的指针指针变量指针变量存放地址的变量存放地址的变量 int *p;指向变量的指针变量指向变量的指针变量一个指针变量存放变量一个指针变量存放变量a的地址,的地址, 则称该指针变量为则称该指针变量为指向指向变量变量a的的 指针变量。指针变量。 P=&a;C语言程序设计语言程序设计7指针变量的定义:指针变量的定义: 其一般形式为:其一般形式为: 类型说明符类型说明符 *变量名;变量名; *表示这是一个指针变量,变量名即指针变量名,类型表示这是一个指针变量,变量名
6、即指针变量名,类型说明符表示指针变量所指向的变量的数据类型。说明符表示指针变量所指向的变量的数据类型。注意,一个指针变量只能指向注意,一个指针变量只能指向同类型同类型的变量的变量指针变量的赋值指针变量的赋值 指针变量的赋值只能赋予地址,指针变量的赋值只能赋予地址, 否则将引起错误。否则将引起错误。 其一般形式为:其一般形式为: & 变量名;变量名; C语言程序设计语言程序设计81、把一个变量的地址赋予指向相同数据类型的指针变量。把一个变量的地址赋予指向相同数据类型的指针变量。例如:例如: int a,*pa pa=&a; /*把整型变量把整型变量a的地址赋予整型指针变量的地址赋予整型指针变量p
7、a*/2、把一个指针变量的值赋予指向相同类型变量的另一个指把一个指针变量的值赋予指向相同类型变量的另一个指针变量。针变量。如:如: int a,*pa=&a,*pb; pb=pa;指针变量的赋值运算指针变量的赋值运算C语言程序设计语言程序设计93、把数组的首地址赋予指向数组的指针变量。把数组的首地址赋予指向数组的指针变量。例如:例如: int a5,*pa; pa=a; 也可写为:也可写为: pa=&a0; 4、把字符串的首地址赋予指向字符类型的指针变量。把字符串的首地址赋予指向字符类型的指针变量。 例如:例如: char *pc; pc=C language;或用初始化赋值的方法写为:或用初
8、始化赋值的方法写为: char *pc=C Language; 这里应说明的是并不是把整个字符串装入指针变量,这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。而是把存放该字符串的字符数组的首地址装入指针变量。C语言程序设计语言程序设计10nint *p;n定义了一个指针变量定义了一个指针变量p,该变量的值为一个指该变量的值为一个指向整型变量的地址(指针)向整型变量的地址(指针)np=&a;nP的值为变量的值为变量a的地址,称的地址,称p指向指向an*pn间接访问间接访问p指向的变量指向的变量a的内容的内容n 取地址运算符取地址运算符 & 取内容
9、运算符取内容运算符 *总结总结C语言程序设计语言程序设计11注意:注意:指针运算符指针运算符*和指针变量说明中的指针说明符和指针变量说明中的指针说明符* 不是一回事。不是一回事。在指针变量说明中,在指针变量说明中,“*”是类型说明是类型说明符,表示其后的变量是指针类型。符,表示其后的变量是指针类型。而表达式中出现的而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。则是一个运算符用以表示指针变量所指的变量。C语言程序设计语言程序设计12l&*p即即&a与与p等价等价l*&a即即*p与与a等价等价l*p+即即*(p+),即先取值后指向下一个存储单元即先取值后指向下一个存储单元l *+
10、p即即*(+p) 即先指向下一个存储单元后取值即先指向下一个存储单元后取值l(*p)+ 表示表示p当前所指向的元素加当前所指向的元素加1 C语言程序设计语言程序设计13n为通过函数调用得到为通过函数调用得到n个要改变的值,可以:个要改变的值,可以:n使用使用n个全局变量个全局变量n使用使用n个指针参数间接改变其所指向变量的值个指针参数间接改变其所指向变量的值C语言程序设计语言程序设计14例例 写一交换两个变量值的函数写一交换两个变量值的函数sawp() void sawp(int *x, int *y) int temp; temp=*x; *x=*y; *y=temp; main() int
11、 a,b,*p,*p1=&a,*p2=&b; scanf(%d%d,p,p2); printf(na=%d, b=%dnn, a,b); sawp(p1,p2); printf(na=%d, b=%dnn, a,b);C语言程序设计语言程序设计155a&ap1p29b&b5a&ap1x&a9b&bp2y&b9a&ap1x&a5b&bp2y&b9a&ap1p25b&b程序的执行过程程序的执行过程调用前调用前调用时调用时在函数在函数sawp()中中调用结束后调用结束后C语言程序设计语言程序设计16指向一维数组的指针变量指向一维数组的指针变量一个指针变量可指向一个数组,也可指向一个数组元素。一个指针
12、变量可指向一个数组,也可指向一个数组元素。 可把数组名或第一个元素的地址赋予它,如要使指针变量指可把数组名或第一个元素的地址赋予它,如要使指针变量指向第向第i号元素可把号元素可把i元素的首地址赋予它或把数组名加元素的首地址赋予它或把数组名加i 赋予它赋予它C语言程序设计语言程序设计17 例:例:int a10; int *p=a; p,a,&a0均指向同一单元,它均指向同一单元,它们是数组们是数组a的首地址,也是的首地址,也是0号号元素元素a0的首地址。的首地址。1a0a1a2a3a9537919p,a,&a0aip+i,a+i,&aip+1,a+1,&a1 p+1,a+1,&a1均指向均指向
13、1号号元素元素a1。 类推可知类推可知p+i,a+i,&ai指指向向i号元素号元素ai。 应该说明的是应该说明的是p是指针变量,而是指针变量,而a,&ai都都是常量。是常量。一、指向数组元素的指针一、指向数组元素的指针C语言程序设计语言程序设计18二、通过指针引用数组元素二、通过指针引用数组元素 引入指针变量后,就可以用两种方法来访问数组元素了。引入指针变量后,就可以用两种方法来访问数组元素了。 第一种方法为第一种方法为下标法下标法,即用,即用ai形式形式访问数组元素。访问数组元素。 第二种方法为第二种方法为指针法指针法,即采用,即采用*(a+i)形式形式,用间接访问的方法,用间接访问的方法来
14、访问数组元素。来访问数组元素。main() int a5,i,*pa=a; for(i=0;i5;i+) scanf(%d“, pa); pa+; pa=a; for(i=0;i5;i+) printf(a%d=%dn,i,*pa); pa+; main() int a5,i; for(i=0;i5;i+) scanf(%d &ai); for(i=0;i5;i+) printf(a%d=%dn,i,ai); C语言程序设计语言程序设计19lint a10,*p;数组在内存中连续存放,数组名数组在内存中连续存放,数组名a为首地址,即为首地址,即&a0lP=a;等价于等价于p=&a0;lP+i、
15、a+i与与&ai等价等价l*(P+ i )、*(a+ i )与与ai 等价等价l可以可以P+,但不可但不可a+l*(p+) 相当于相当于ai+ 总结总结C语言程序设计语言程序设计20float aver(float *pa);main() float sco5,av,*sp; int i; sp=sco; printf(ninput 5 scores:n); for(i=0;i5;i+) scanf(%f,&scoi); av=aver(sp); printf(average score is %5.2f,av);float aver(float *pa) int i; float av,s=
16、0; for(i=0;i5;i+) s=s+*pa+; av=s/5; return av;C语言程序设计语言程序设计21说明:说明:在在C语言中形参和实参都可使用指针变量和数组名:语言中形参和实参都可使用指针变量和数组名: 1、当形参是数组时,要求对应的实参为:、当形参是数组时,要求对应的实参为: 同类型的数组名或指针变量同类型的数组名或指针变量 2、当形参是指针变量,要求对应的实参为:、当形参是指针变量,要求对应的实参为: 同类型的指针变量或数组名同类型的指针变量或数组名形式参数形式参数 指针变量指针变量 数组名数组名实参数实参数 指针变量指针变量 数组名数组名C语言程序设计语言程序设计2
17、2lint a34;213465781091112a0a1a2a&a0a+1&a1a+2&a2a0、*(a+0)、*a、&a00a0+1、*(a+0)+1、*a+1、&a01a1+3、*(a+1)+3、&a13*(a1+2)、*(*(a+1)+2)、a12二维数组的地址二维数组的地址C语言程序设计语言程序设计23设有定义:设有定义: int a34,i,j;引用二维数组元素的方法:引用二维数组元素的方法:(1)下标法:)下标法: aij(2)指针法:指针法: *(*(a+i)+j)#define PF %d,%d,%d,%d,%d,nmain() int a34=0,1,2,3,4,5,6,7
18、,8,9,10,11; printf(PF,a,*a,a0,&a0,&a00); printf(PF,a+1,*(a+1),a1,&a1,&a10); printf(%d,%dn,a1+1,*(a+1)+1); printf(%d,%dn,*(a1+1),*(*(a+1)+1); C语言程序设计语言程序设计24设有定义:设有定义:int a34,i,j; int *p; p=&a00; p为指向数组元素的指针变量,是一个为指向数组元素的指针变量,是一个列指针列指针变量。变量。 p+1则表示指向当前元素的下一个元素。则表示指向当前元素的下一个元素。 元素元素aij的地址表示为:的地址表示为: p
19、+4*i+j aij的值表示为:的值表示为: *(p+4*i+j) 指向二维数组的指针变量指向二维数组的指针变量1、指向数组元素的指针变量、指向数组元素的指针变量C语言程序设计语言程序设计25指向数组元素指向数组元素main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int i,j,*p; p=&a00; for(i=0;i12;i+) if (i%4=0) printf(n); printf(%2d ,*p+); C语言程序设计语言程序设计26nm的二维数组的二维数组a 可分解为一维数组可分解为一维数组a0,a1,. .an-1,而它们分别又是具有而它们分别又
20、是具有m个元素的一维数组。个元素的一维数组。 因此可定义一个指向由因此可定义一个指向由m个元素组成的一维数组的指针变量个元素组成的一维数组的指针变量来处理二维数组。把这个指针变量称为:来处理二维数组。把这个指针变量称为:行指针变量行指针变量 行指针变量说明的一般形式为:行指针变量说明的一般形式为: 类型说明符类型说明符 (*指针变量名指针变量名)长度长度 例:例: int (*p)4 它表示它表示p是一个指针变量,它指向由是一个指针变量,它指向由4个元素组成的一维数组,或说个元素组成的一维数组,或说p可指向一个有可指向一个有4列的二维数组。列的二维数组。2、指向由、指向由m个元素组成的一维数组
21、的指针变量个元素组成的一维数组的指针变量C语言程序设计语言程序设计27 0 1 2 3 4 5 6 7 8 9 10 11a0a1a2a, pa+2, p+2a+1, p+1*p+0*(p+1)+1*p+2*(*(p+3)+3)数组名数组名a为数组的首地址为数组的首地址int a34=0,1,2,3,4,5,6,7,8,9,10,11;int i,j, (*p)4;p=a;数组数组a的元素的元素aij的表示:的表示:*(*(a+i)+j), *(*(p+i)+j)*(ai+j) , *(pi+j)C语言程序设计语言程序设计28数组声明为数组声明为“int a66;”,表达式表达式“*a+i”是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 指针 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内