资源描述:
《C语言教程 第10章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章指针每一个学习和使用C语言的人,都应当深入地学习和掌握指针。可以说,不掌握指针就是没有掌握C的精华。这一章是这本书中的重点与难点,是重中之重。10.1地址和指针的概念…359…ijk2000200220042006pt200020022004问:可以定义出存放整型数的变量i、j、k,那么,能否定义出用于存放地址的变量呢?pt就是一个存放地址的变量,是一个指针变量。指针是地址的一种较为形象的叫法。其实,指针就是地址,地址就是指针。当pt中存放的是2004时,pt叫作指针变量,指针变量中的值是一个地址,即2004。注意,区分“指针”和“指针变量”,指针是一个地址,而指针变量是
2、存放地址的变量10.2变量的指针和指向变量的指针变量10.2.1定义一个指针变量一般形式:基类型*指针变量名;如,int*pt;int*pt;int*pt;int*pt1,*pt2;(不能写为int*pt1,pt2;或int*pt1,pt2;)…359…ijk2000200220042006pt2004问:如图所示,若没有定义变量k,能否将2004单元中的9改为20呢?*pt=20;20*pt表示指针pt所指向单元的内容。10.2.2指针变量的引用例10.1main(){inta=100,b=10;int*pt1,*pt2;pt1=&a;pt2=&b;printf(“%d,%d
3、n”,a,b);printf(“%d,%d”,*pt1,*pt2);}ab10010pt1pt2&a&b取地址符main(){inta=100,b=10;int*pt1=&a,*pt2=&b;*pt1=15;*pt2=30;printf(“%d,%d”,a,b);printf(“%d,%d”,*pt1,*pt2);}ab10010pt1pt2&a&b1530int*pt1=&a,*pt2=&b;*pt1=15;*pt2=30;pt1指向a,pt2指向b。int*pt1=&a,*pt2=&b;*pt1=15;*pt2=30;注意,这两处*的意义是不同的。上面的*处于定义
4、位置,它的作用是表明pt1与pt2为指针。而下面的*则表示引用pt1与pt2所指向单元的内容。即一个表示定义指针,一个表示引用内容。答:错,因为它相当于&(*a),而*a是不对的。在混合使用&和*时,要注意分清它们各自的运算对象和运算时的结合性。如,inta,*p;p=&a;*&a *(&a)*pa&*p&(*p)&ap问:&*a对吗?对于*&p,知道就是P即可。至于原因,学完第10章就清楚了。10.2.3指针变量作为函数参数例10.3对输入的两个整数按大小顺序输出。main(){voidswap(int*p1,int*p2);inta,b,*pt1,*pt2;scanf(“%d
5、,%d”,&a,&b);pt1=&a;pt2=&b;if(a
6、,存储在动态数据区,也即存放在用户区,从而不会在系统区。这样t就指向了用户区)。voidswap(int*p1,int*p2){int*t;t=p1;p1=p2;p2=t;}ab59pt1pt2p1p2交换前交换后由图可知,p1、p2交换前后没有任何变化,故,此程序没有任何用处。main(){voidswap(intp1,int*p2);inta,b,pt1,*pt2;scanf(“%d,%d”,&a,&b);pt1=a;pt2=&b;if(a
7、tt;t=p1;p1=*p2;*p2=t;}ab59pt2p2pt15510.3数组与指针10.3.1指向数组元素的指针由于数组元素就是一个普通的变量,所以指向数组元素的指针就是指向普通变量的指针。10.3.2通过指针引用数组元素共同回忆:数组名是一个地址,是一个指针,是一个指针常量,它指向数组在内存的起始位置。59-6813a[0]a[1]a[2]a[3]a[4]aa+1a+2a+3a+4inta[5]={5,9,-6,8,13};数组元素a[i]可表示为*(a+i)由于a为一