幻灯片-C语言程序设计视频教程-第10章.ppt_第1页
幻灯片-C语言程序设计视频教程-第10章.ppt_第2页
幻灯片-C语言程序设计视频教程-第10章.ppt_第3页
幻灯片-C语言程序设计视频教程-第10章.ppt_第4页
幻灯片-C语言程序设计视频教程-第10章.ppt_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C计算机编程,讲师:云南Email:第10章指针,指针是C语言的重要概念和C语言的重要特征。正确灵活地使用可以有效地表达复杂的数据结构。可以动态分配内存。字符串很容易使用。可以有效且轻松地使用阵列。调用函数时,可能会得到多个结果。能够直接处理内存设备地址等,对系统软件设计是非常必要的。掌握指针的应用,可以使程序简洁、紧凑、高效。所有学习和使用c语言的人都必须深入学习并掌握指针。如果不掌握指针,就可以说不掌握C的整数。10.1地址和指针的概念,变量的属性:如何访问名称、值和地址变量:直接访问,间接访问变量的地址称为变量的“指针”指针变量是存储地址的变量,10.2变量的指针和指向变量的指针变量是变

2、量的地址。变量的指针是变量的地址。存储变量地址的变量是指向其他变量的指针变量。程序用“*”符号显示“指针”,以指示指针变量与指针变量指向的变量之间的连接。如果I_pointer定义为指针变量(*i_pointer),则i_pointer是指向的变量。10.2.1定义指针变量。c语言规定,在使用所有变量之前,必须定义所有变量,指定类型,并相应地分配内存单位。指针变量与整数变量和其它类型的变量不同,指针变量专门用于保存地址,应定义为“指针类型”。定义指针变量的常用格式是基本类型*指针变量名称。可以使用赋值语句使一个指针变量获得另一个变量的地址,从而指向一个变量。定义指针变量时需要注意的两个茄子点:

3、(1)指针变量前面的“*”表示变量类型为指针变量,(2)定义指针变量时必须指定基本类型。10.2.2指针变量的引用,指针变量只能存储地址(指针)。不要包含整数。相关运算符为:(1) int * pointer_1,* pointer _ 2;A=100B=10Pointer_1=,程序的说明:开头定义了两个指针变量Pointer_1和pointer_2,但未指向任何整数变量。仅提供两个指针变量,使您可以指向整数变量。最后一行的*pointer_1和*pointer_2是变量a和变量b。最后两个printf函数功能相同。int * pointer_1和int * pointer_2表示定义两个指

4、针变量pointer_1和pointer_2。程序最后一行printf函数中的* pointer_1和* pointer_2表示pointer_1和pointer_2指向的变量。*请小心,不要将pointer _ 1=scanf(“%d,% d”,10.2.3指针变量写为函数参数)。函数参数可以是整数、浮点数、字符类型等数据,也可以是指针类型。其作用是将一个变量的地址传递到另一个函数。示例10.3标题需要相同的示例10.2。也就是说,输入的两个整数按大小顺序输出。# include void main()void swap(int * P1,int * p2);Int a、b;Int * po

5、inter_1,* pointer _ 2;scanf(“%d,% d”,void swap (int * P1,int * p2)int temp;Temp=* p1* p1=* p2* p2=temp,示例输入3个10.4 a、b和c的整数,按大小顺序输出。void main() int a、b、c、*p1、*p2、* p3Scanf (%d,%d,% d ,void exchange (int * Q1,int * Q2,int * Q3) if (* Q1 * Q3)If(*q2*q3) swap(q2、Q3);Void swap (int * pt1,int * pt2)int te

6、mp;Temp=* pt1* pt1=* pt2* pt2=temp,10.3数组和指针,变量有地址,数组有多个元素,每个数组元素从内存中占用存储设备,每个都有相应的地址。指针变量可以指向变量,因此也可以指向数组元素(将元素地址放在指针变量中)。阵列元素指针是阵列元素地址。参考阵列元素可以通过下标方法(如a3)或指针方法(即指向阵列元素的指针)找到所需的元素。使用指针方法可以提高目标程序的质量(内存不足,执行速度提高)。10.3.1阵列元素指针,使用与之前为变量说明的指针变量相同的方法定义阵列元素指针变量。范例:int a10int * p;假设P=,10.3.2指针定义为数组元素引用,p定义

7、为指向整数数据的指针变量,指定了整数数组元素地址,指向其中一个数组元素。如果具有以下赋值语句:* p=1;表示p将1分配给当前指向的数组元素。p的初始值为/* for(int I=0;I10I) scanf(%d,*/,/* for(int I=0;I10I) scanf(%d,a I);for(I=0);I10I) printf(%d,*(a I);*/、/* int * p;p=a;for(int I=0);I10I) scanf(%d,p I);for(I=0);I10I) printf(%d,*(p I);*/return 0;三种茄子方法的比较:下标和地址方法执行相同的效率。指针方法

8、比下标和地址方法更快,使用指针变量直接指向元素,从而无需每次重新计算地址。定期更改地址将大大提高执行效率。下标法比较直观,可以直接知道是第几个元素。地址法或指针法不直观,很难快速判断当前正在处理的元素中的哪一个。使用指针变量指向阵列元素时,请记住,可以更改指针变量的值以指向其他元素。必须注意指针变量的当前值。实际上,指针变量可以指向数组后面的内存单元。示例通过10.6指针变量输出a数组的10个元素,#include void main() int * p,I,a10p=a;for(I=0);I10I)scanf(“% d”,p);printf(“n”);for(I=0);I10I,p)prin

9、tf(“% d”,* p);printf(“n”);请注意指针变量的操作:p(或p=p 1)。使p指向下一个元素。* p .和*具有相同的优先级,并且绑定从右到左进行,因此等于*(p)。*(p)与*(p)完全不同。前者是先取*p,然后做p 1。后者首先是P加1,然后是*p。(*p)是p指向的元素值加1。如果p当前指向a数组中的第I个元素:* (p-)对应于ai-* (p),ai * (-p)对应于a-I,格式参考指针变量(3)实际参数对应于指针变量(4)# include stdafx.h void inv (int * x,int n) For(i=0,j=n-1);I=(n-1)/2;I,j-)int temp;temp=*(x I);*(x I)=*(x j);*(x j)=temp;intmain (intargc,char * argv)inta 10;for(int I=0);I=9;I) scanf(%d,示例10.8示例10.7,# include STD afx.h void inv (int x,int n) int I,j;For(i=0,j=n-1;I=(n-1)/2;I,j-)int temp;Temp=xiXi=xjXj=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论