欢迎来到天天文库
浏览记录
ID:61272134
大小:2.13 MB
页数:53页
时间:2021-01-23
《指针的应用教学文稿.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、指针的应用9.1一维数组与指针C语言规定数组名代表数组的起始地址,一个数组包含若干个元素,每个数组元素都在内存中占用存储空间,都有相应的地址,指针变量可以指向数组或数组元素。【例9.1】下面的程序用于演示数组元素的引用方法,请认真体会它们的联系和区别。#include"stdio.h"intmain(){inta[5],i;for(i=0;i<5;i++){scanf("%d",&a[i]);}for(i=0;i<5;i++){printf("%3d",a[i]);}printf("");return0;}#include"stdio.h"intmain(){inta[5],i
2、;for(i=0;i<5;i++){scanf("%d",a+i);}for(i=0;i<5;i++){printf("%3d",*(a+i));}printf("");return0;}9.1.1数组名的特殊意义及其在访问数组元素中的作用9.1.2数组元素的指针inta[5],*p;p=&a[0];p=&a[0];等价于p=a;其作用是将指针变量p指向数组元素的首地址,其指向关系如图9-2(b)所示。9.1.3指针变量运算指针变量的运算是指指针变量所持有的地址为运算对象进行的运算,所以指针变量的运算实际上就是地址的运算。指针的运算常常是针对数组元素的,因为数组在内存中是连续存
3、放的,所以指向同一数组中不同元素的两个指针的关系运算常用于比较它们所指元素在数组的前后位置关系。指针的算术运算(增1或减1)则常用来移动指针的指向,使其指向数组中的其他元素。这里强调只有运算结果仍指向同一数组中的元素时,指针运算才有意义。1、指针加上整数指针p加上整数j将产生指向特定元素的指针,这个特定元素是p原来指向的元素后的第j个位置。2、指针减去整数指针p减去整数j将产生指向特定元素的指针,这个特定元素是p原来指向的元素前的第j个位置。3、两个指针相减当两个指针相减的时候,结果为两个指针之间的距离,用数组元素的个数来表示。因此,如果p指向a[i]且q指向a[j],则p-q就等
4、于i-j。4、指针的比较可以用关系运算符(<、<=、>、>=)和判断运算符(==和!=)进行指针的比较运算,只有在两个指针指向同一数组时,用关系运算符进行的指针比较才有意义。比较的结果依赖于数组中两个元素的相对位置。例如:inta[10],*p,*q;p=&a[5];q=a[1];p<=q的指位0,而p>=q的结果为1。inta[5],*p;p=a;表明定义了一个指向整形数据的指针变量p,使其指向了数组a的首地址,通过这个指针变量p就可以访问数组a的元素。5、用指针变量访问数组元素注意:指针运算p+1和p++表面现象上看,都是对当前的指针p进行加1运算,但p+1并不改变当前指针的指
5、向,p++表示使p的指向从当前的位置指向下一个元素。p++的偏移问题,是偏移1*sizeof(基类型)个字节。采用通过移动指针变量p来引用数组元素的方法,可将【例9.1】程序修改为#include"stdio.h"intmain(){inta[5],*p;for(p=a;p6、],*(a+j),p[j],*(p+j)等价,代表a数组第j+l个元素的值。③*(p++)等价于a[j++]、*(p--)等价于a[j--]、*(++p)等价于a[++j]、*(--p)等价于a[--j]。数组元素表示方法a[0]a[1]a[2]a[3]a[9]...aa+9a+1a+2地址元素下标法a[0]a[1]a[2]a[9][]变址运算符a[i]*(a+i)a[i]p[i]*(p+i)*(a+i)*a*(a+1)*(a+2)*(a+9)inta[10];a[0]a[1]a[2]a[3]a[9]...pp+9p+1p+2地址元素指针法*p*(p+1)*(p+2)*(p7、+9)p[0]p[1]p[2]p[9]a[0]a[1]a[2]a[3]a[4]例数组元素的引用方法main(){inta[5],*p,i;for(i=0;i<5;i++)a[i]=i+1;pa=a;for(i=0;i<5;i++)printf("a[%d]:%d",i,a[i]);for(i=0;i<5;i++)printf("*(a+%d):%d",i,*(a+i));for(i=0;i<5;i++)printf("p[%d]:%d",i,p[i]);f
6、],*(a+j),p[j],*(p+j)等价,代表a数组第j+l个元素的值。③*(p++)等价于a[j++]、*(p--)等价于a[j--]、*(++p)等价于a[++j]、*(--p)等价于a[--j]。数组元素表示方法a[0]a[1]a[2]a[3]a[9]...aa+9a+1a+2地址元素下标法a[0]a[1]a[2]a[9][]变址运算符a[i]*(a+i)a[i]p[i]*(p+i)*(a+i)*a*(a+1)*(a+2)*(a+9)inta[10];a[0]a[1]a[2]a[3]a[9]...pp+9p+1p+2地址元素指针法*p*(p+1)*(p+2)*(p
7、+9)p[0]p[1]p[2]p[9]a[0]a[1]a[2]a[3]a[4]例数组元素的引用方法main(){inta[5],*p,i;for(i=0;i<5;i++)a[i]=i+1;pa=a;for(i=0;i<5;i++)printf("a[%d]:%d",i,a[i]);for(i=0;i<5;i++)printf("*(a+%d):%d",i,*(a+i));for(i=0;i<5;i++)printf("p[%d]:%d",i,p[i]);f
此文档下载收益归作者所有