C语言指针精品ppt课件_第1页
C语言指针精品ppt课件_第2页
C语言指针精品ppt课件_第3页
C语言指针精品ppt课件_第4页
C语言指针精品ppt课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

1、第11章指针,C程序设计快速高级大学教程。C程序设计快速高级大学教程,2020/7/21,2,第11章指针,关键点指针概念指针和数组指针和函数串动态空间管理,C程序设计快速高级大学教程,2020/7/21,3,11指针,知识点指针概念指针指向数组,指针数组指针为参数,指针为函数值,指针字符串动态空间管理指向函数,C编程快速高级大学教程,2020/7/21,4,11.1,理解指针,问路时,我经常听到这样的回答:“在三个路口右转,在两个路口左转,然后走200米。”在图书馆找书时,常常是这样的:“第五排书架,二楼从上到下,第六本书从左数。”当老师问学生问题时,他们经常说:“第四排左边的第二个学生。”

2、上面的例子表明,当一个事务不能通过名称直接访问时,只能通过它的位置来访问。同样,在前一章中,对数据的访问是通过变量名来实现的,但是有时变量名是未知的,甚至没有名字,所以只能通过数据所在的地址来访问。c程序设计快速高级大学课程,2020/7/21,5,11.2指向变量的指针,当用c语言定义变量时,例如:int i1=3;它描述了与变量相关的三个属性:值、地址和类型。1。该值为3,通过变量访问,如i1 5,2。地址是0012ff78(32位机器,0012ff78是十六进制数),并且通过例如int *pi1来访问占据存储器空间的位置;指针变量的定义包括三个内容:1 .指针类型描述,*表示它是指针变量

3、;2.指针变量名,pi1是指针变量名;3.指针指向的变量的数据类型,int是指针指向的变量的数据类型,这意味着pi1只能存储整数变量的地址。另一个例子:float * pf1/*pf1是指向浮点变量*/char *pc1 /*pc1是指向字符变量*/的指针变量。C,2020/7/21,8,11.2.2中指针变量的引用。指针变量和普通变量一样,在使用前必须被定义并给定特定的值。不能使用未赋值的指针变量,否则系统将会混乱甚至崩溃。当有人向你问路时告诉你一个不存在的地址会发生什么?),C编程快速高级大学教程,2020/7/21,9,11.2.2指针变量引用,有两个与指针相关的运算符,C编程快速高级大

4、学教程,2020/7/21,10,11.2.2指针变量引用,指针变量描述:1。2.不能用数字给指针变量赋值。下列赋值是错误的:int * pi1pi1=20但是,指针可以被赋值为0,这意味着指针为空,不指向任何地方。3.为指针变量赋值时,不能在指针变量前添加“*”描述符。以下文字有误:int i1int * pi1*pi1=指针变量pi1以*开头,表示间接访问和i1。c程序设计快速高级大学教程,2020/7/21,11,11.2.2指针变量引用,指针变量描述:4。指针变量不指向特定的有效地址,间接访问将有问题int * pi1/*指针变量pi1没有赋值,所以我不知道它指向哪里*/* pi1=2

5、00;/*将200 */分配到pi1所指向的地址空间(随机给你一个账户,存钱后怎么得到它?)来确定指针变量是否指向有效空间:int * pi1=0;if(pi1!=0)* pi1=200;在省略号部分,如果pi1没有指向有效的空格,将不会执行*pil的赋值。,C编程快速高级大学教程,2020/7/21,12,11.2.2指针变量的引用,指针变量的描述:5。指针变量的值可以在i1=3,i2=4,* pi1Pi1=,c程序设计快速高级大学教程,2020/7/21,13,11.2.2指针变量引用,指针变量描述:5。指针变量值可更改pi1=将指针变量pi1更改为指向I2、c程序设计快速高级大学教程,2

6、020/7/21 /*pf1是指向浮点变量*/char c1的指针变量;/*字符变量*/pf1=pf1只能存储浮点数据的地址,用字符数据地址赋值是错误的。C程序设计快速高级大学课程,2020/7/21,15,11.2.2指针变量的引用,指针变量描述:7。相同类型的指针变量可以相互赋值。示例11.1交换指针变量#包括int main() int i1=3,I2=4;int *pi1,*pi2,* pi3Pi1=,程序运行结果:i1=3 i2=4 *pi1=4 *pi2=3,C,一门快速高级的大学程序设计课程,2020/7/21,16,11.2.2,指针变量引用,指针变量描述:7。相同类型的指针变

7、量可以相互赋值。示例11.1交换指针变量2020/7/21,17,11.2.2指针变量的引用,指针变量的描述:7。相同类型的指针变量之间的相互赋值示例11.2由指针变量#指向的交换数据包括int main() int i1=3,I2=4;int *pi1,* pi2int ItemP=0;Pi1=,程序运行结果:i1=4 i2=3 *pi1=4 *pi2=3,C,一门快速高级的大学程序设计课程,2020/7/21,18,11.2.2,指针变量引用,指针变量描述:7。相同类型的指针变量可以相互赋值。示例11.2交换指针变量2020/7/21,20,11.3数组和指针,一个变量有一个地址,一个数组

8、包含几个元素,每个数组元素占用内存中的一个存储单元,并且它们都有相应的地址。数组的指针是索引组的起始地址,数组元素的指针是数组元素的地址。指针也可以用来访问数组元素,这更有效。C程序设计快速高级学院教程,2020/7/21,21,11.3.1一维数组和指针,一个数组由一个连续的存储单元组成。数组名是这个连续存储单元的第一个地址(常量)。int iArr5=,2,3,4,5;int * pi圆周率=,c,快速高级大学程序设计课程,2020/7/21,22,11.3.1一维数组和指针。c语言规定数组名代表数组的第一个地址,即第0个元素的地址。因此,下面两个语句是等价的:pi=/*不能,因为IaR是

9、一个常数*/,程序设计的快速高级大学课程,2020/7/21,23,11.3.1一维数组和指针,1。指针相关运算符(1)采用地址运算符int * pi,* pi1。Pi=*pi:因为它与*具有相同的优先级,所以组合方向是从右向左,这相当于*(pi)。首先给出,然后在上加1。表达式的值是iR1,pi的值是int *pi,*pi1,* pi2Pi=*pi:因为它与*具有相同的优先级,所以组合方向是从右向左,这相当于*(pi)。首先给出,然后在上加1。表达式的值是iArr1,pi的值是int * pipi=iArr(1) pi i1和IaR i1是IaR R1的地址,或者它们指向IaR数组的第I个元

10、素。(2) *(pi i1)或*(IaR i1)是pi i1或IaR i1所指向的数组元素,即IaR i1。例如,*(pi 2)或*(IaR 2)是IaR 2。(3)指向数组的指针变量可以是下标,例如,pii1等于*(pi i1)。引入指针变量后,pi是指向数组的指针变量,其初始值pi=iArr。有两种方法可以访问数组元素: (1)下标方法,即以iArri1的形式访问数组元素,或者用pii1访问数组元素。(2)指针方法,它使用*(IaR i1)或*(pi i1)的形式间接访问数组元素。,c快速高级大学程序设计课程,2020/7/21,29,11.3.1一维数组和指针,示例11.3数组元素的赋值

11、和输出(数组名称订阅方法)#包括int main() int iArr5,i1;对于(i1=0;i15i1)iArri 1=i1;对于(i1=0;i15i1)printf(IaR % d=% dn,i1,iArri 1);返回0;C程序设计快速高级大学课程,2020/7/21,30,11.3.1一维数组和指针,示例11.4数组元素的赋值和输出(指针变量订阅方法)#包括int main() int iArr5,i1;int * pi=iArr/*pi是变量,IaR是常数*/对于(i1=0;i15i1)pi i1=i1;对于(i1=0;i15i1)printf(IaR % d=% dn,i1,pi

12、i 1);返回0;C程序设计快速高级大学课程,2020/7/21,31,11.3.1一维数组和指针,示例11.5数组元素的赋值和输出(数组名称指针方法)#包括int main() int iArr5,i1;对于(i1=0;i15i1)*(IaR i1)=i1;对于(i1=0;i15i1)printf(IaR % d=% dn,i1,*(IaR i1);返回0;C程序设计快速高级大学课程,2020/7/21,32,11.3.1一维数组和指针,示例11.6数组元素的赋值和输出(指针变量指针方法)#包括int main() int iArr5,i1;int * pi=iArr对于(i1=0;i15i1)*(pi i1)=i1;对于(i1=0;i15i1)printf(IaR % d=% dn,i1,*(pi i1);返回0;C程序设计快速高级大学课程,2020/7/21,33,11.3.1一维数组和指针,示例11.7数组元素的赋值和输出(指针变量指针移动方法)#包括int main() int iArr5,i1;int * pi=iArr对于(i1=0;i15i1)* pi=i1;pi;/*此时,在pi指向iA

温馨提示

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

最新文档

评论

0/150

提交评论