第7章C51的指针.ppt

上传人:王** 文档编号:615104 上传时间:2023-12-08 格式:PPT 页数:30 大小:253.50KB
下载 相关 举报
第7章C51的指针.ppt_第1页
第1页 / 共30页
第7章C51的指针.ppt_第2页
第2页 / 共30页
第7章C51的指针.ppt_第3页
第3页 / 共30页
第7章C51的指针.ppt_第4页
第4页 / 共30页
第7章C51的指针.ppt_第5页
第5页 / 共30页
第7章C51的指针.ppt_第6页
第6页 / 共30页
第7章C51的指针.ppt_第7页
第7页 / 共30页
第7章C51的指针.ppt_第8页
第8页 / 共30页
第7章C51的指针.ppt_第9页
第9页 / 共30页
第7章C51的指针.ppt_第10页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第7章C51的指针.ppt》由会员分享,可在线阅读,更多相关《第7章C51的指针.ppt(30页珍藏版)》请在优知文库上搜索。

1、21天学天学51单片机开发单片机开发第七讲:第七讲:C51的指针的指针 1-2课程安排课程安排地址和指针概述地址和指针概述 指针变量的声明指针变量的声明指针变量的赋值指针变量的赋值 指针变量的运算符指针变量的运算符特殊的指针类型特殊的指针类型数组指针数组指针 特殊的指针类型特殊的指针类型字符指针字符指针 1-3地址和指针概述地址和指针概述内存单元是单片机存储器中的最小存储单位,通常内存单元是单片机存储器中的最小存储单位,通常一个字节称为一个内存单元。一个字节称为一个内存单元。单片机内存单元的编号也就是单片机内存单元的编号也就是地址地址。指针是一种特殊的数据类型,用指针声明的变量称指针是一种特殊

2、的数据类型,用指针声明的变量称为指针变量。为指针变量。指针变量的值实际上是一个地址,是单片机内存单指针变量的值实际上是一个地址,是单片机内存单元的编号。元的编号。单片机中不同的数据类型所占用的内存单元数和它单片机中不同的数据类型所占用的内存单元数和它的大小有关。的大小有关。1-4指针变量的声明指针变量的声明 声明一个指针变量具有特殊的形式,如下所示:声明一个指针变量具有特殊的形式,如下所示:类型标识符类型标识符*指针名指针名;类型标识符类型标识符*指针名指针名1,*指针名指针名2,;在声明指针变量时,应注意如下几点:在声明指针变量时,应注意如下几点:在定义指针变量时,指针名前的在定义指针变量时

3、,指针名前的“*”不能省略。不能省略。同一个指针变量只能指向同一类型的变量。同一个指针变量只能指向同一类型的变量。1-5指针变量的赋值指针变量的赋值 指针变量的赋值就是给予一个合理的地址值。指针变量的赋值就是给予一个合理的地址值。指针变量被声明后可以指向任何同类型的变量。指针变量被声明后可以指向任何同类型的变量。C51中使用地址运算符中使用地址运算符“&”获取变量的首地址。获取变量的首地址。如果定义指针变量时不进行赋值,该指针变量被初如果定义指针变量时不进行赋值,该指针变量被初始化为始化为NULL。1-6指针变量的赋值指针变量的赋值在在C51语言中提供了灵活的指针变量赋值方法,主语言中提供了灵

4、活的指针变量赋值方法,主要有如下几种:要有如下几种:在声明时赋值在声明时赋值 动态赋值动态赋值 指针变量之间传递指针变量之间传递 特殊的指针变量赋值特殊的指针变量赋值数组数组 特殊的指针变量赋值特殊的指针变量赋值字符串字符串 特殊的指针变量赋值特殊的指针变量赋值函数入口函数入口 1-7在声明时赋值在声明时赋值 在声明时赋值的方法比较简单,而且不占用程序执在声明时赋值的方法比较简单,而且不占用程序执行时间。行时间。需要使用取地址运算符需要使用取地址运算符&来完成。来完成。典型的在声明时赋值语句,示例如下。典型的在声明时赋值语句,示例如下。int a;int*p=&a;/初始化赋值,&a表示取变量

5、a的首地址1-8动态赋值动态赋值 指针变量也可以在程序执行时动态改变指针的值。指针变量也可以在程序执行时动态改变指针的值。需要使用取地址运算符需要使用取地址运算符&来完成。来完成。典型的动态赋值语句,示例如下。典型的动态赋值语句,示例如下。int a;int*p;p=&a;/利用&a获得变量a的首地址,然后赋值给p1-9指针变量之间传递指针变量之间传递 C51中可以将一个指针变量传递给另一个指针变量。中可以将一个指针变量传递给另一个指针变量。在指针变量之间进行地址传递时,指针变量的类型在指针变量之间进行地址传递时,指针变量的类型应该一致。应该一致。int a=15,b=26;/定义变量和初始化

6、int*p1=&a,*p2=&b;/定义指针变量和初始化p2=p1;/把a的地址赋予指针变量p2*p2=*p1;/把p1指向的内容赋给p2所指的区域1-10特殊的指针变量赋值特殊的指针变量赋值数组数组 引用数组时应该逐个元素引用,而不能直接引用数引用数组时应该逐个元素引用,而不能直接引用数组名。组名。数组名代表的是数组存放的首地址。数组名代表的是数组存放的首地址。可以通过引用数组名而将数组首地址赋值给指针变可以通过引用数组名而将数组首地址赋值给指针变量。量。int a7,*p;/声明数组以及指针变量p=a;/数组名表示数组的首地址,故可赋予指向数组的指针变量p=&a0;/数组第一个元素的地址也

7、是整个数组的首地址1-11特殊的指针变量赋值特殊的指针变量赋值字符串字符串 C51语言中没有字符串变量,只有字符串常量。语言中没有字符串变量,只有字符串常量。可以把字符串的首地址赋予指向字符类型的指针变可以把字符串的首地址赋予指向字符类型的指针变量。量。char*p;/声明字符型指针变量p=Hello everyone!;/赋值char*p=Hello everyone!;1-12特殊的指针变量赋值特殊的指针变量赋值函数入口函数入口 指针变量还可以指向函数。指针变量还可以指向函数。对指向函数的指针变量赋值,就是把函数对指向函数的指针变量赋值,就是把函数的入口首地址赋予指向函数的指针变量。的入口

8、首地址赋予指向函数的指针变量。1-13用函数为指针变量赋值注意事项用函数为指针变量赋值注意事项注意其表示方法两对括号都不能省略。注意其表示方法两对括号都不能省略。对指针变量对指针变量pf赋值时,函数名赋值时,函数名fun前没有地址运算前没有地址运算符符“&”。在在C51语言中,指针变量若不带初始化项,其将被语言中,指针变量若不带初始化项,其将被初始化为初始化为NULL。空指针常用于调用一个带有返回指针的函数时。空指针常用于调用一个带有返回指针的函数时。1-14指针变量的运算符指针变量的运算符 C51语言中提供了专门的运算符来用于指针的操作:语言中提供了专门的运算符来用于指针的操作:取地址运算符

9、取地址运算符&取值运算符取值运算符*这些运算符可以完成取地址、赋值、取值等操作。这些运算符可以完成取地址、赋值、取值等操作。指针变量之间也可以进行一些关系和算术运算。指针变量之间也可以进行一些关系和算术运算。1-15取地址运算符取地址运算符&取地址运算符取地址运算符&就是用于提取变量的地址。就是用于提取变量的地址。取地址运算符取地址运算符&是单目运算符,符合自右至左是单目运算符,符合自右至左的结合性。的结合性。取地址运算符取地址运算符&的使用格式如下:的使用格式如下:&变量名变量名 1-16取值运算符取值运算符*取值运算符取值运算符*就是提取指针变量所指向内存单元中就是提取指针变量所指向内存单

10、元中的数据内容。的数据内容。取值运算符取值运算符*也是单目运算符,同样符合自右至左也是单目运算符,同样符合自右至左的结合性。的结合性。取值运算符取值运算符*的使用格式如下:的使用格式如下:*指针变量名指针变量名 1-17取值运算符取值运算符*取内容运算符取内容运算符*和指针变量声明中指针说明符和指针变量声明中指针说明符*是不是不同的,读者应该分清两者的区别。同的,读者应该分清两者的区别。在指针变量说明中,在指针变量说明中,“*”是类型说明符,表示其后是指是类型说明符,表示其后是指针类型的变量。针类型的变量。表达式中出现的表达式中出现的“*”则是一个取值运算符,用来表示指则是一个取值运算符,用来

11、表示指针变量所指向的地址中的数据值。针变量所指向的地址中的数据值。1-18指针变量的运算指针变量的运算 指针变量是特殊的一种变量,其同样也可以参与一指针变量是特殊的一种变量,其同样也可以参与一些运算,但是有很大的局限性。些运算,但是有很大的局限性。指针变量可以参与的运算有如下几类:指针变量可以参与的运算有如下几类:关系运算关系运算 算术运算算术运算 1-19指针变量的关系运算指针变量的关系运算指针变量参与关系运算,可以比较其所指向地址位置指针变量参与关系运算,可以比较其所指向地址位置的高低。的高低。例如对于两个指针变量例如对于两个指针变量p和和q,可参与的运算如下:,可参与的运算如下:若若p=

12、q为真,则表示为真,则表示p1和和p2指向同一地址;指向同一地址;若若pq为真,则表示为真,则表示p处于高地址位置,处于高地址位置,q处于低地址位置处于低地址位置。若若p=q为真,则表示为真,则表示p的地址位置大于等于的地址位置大于等于q的地址位置的地址位置。1-20指针变量的算术运算指针变量的算术运算 指针变量参与算术运算,可用实现地址的增减操作。指针变量参与算术运算,可用实现地址的增减操作。在在C51语言中,指针变量和整数可进行简单的加、减运算。语言中,指针变量和整数可进行简单的加、减运算。具体可以使用的运算如下:具体可以使用的运算如下:p+n p-n p+p p-p1-21特殊的指针类型

13、特殊的指针类型数组指针数组指针 对数组来说,数组名就是数组在内存存放的首地址。对数组来说,数组名就是数组在内存存放的首地址。指针变量可以指向数组的首地址,指针变量也可以指向数指针变量可以指向数组的首地址,指针变量也可以指向数组元素的地址。组元素的地址。这里,我们重点讨论如下几种情况:这里,我们重点讨论如下几种情况:指向一维数组的指针指向一维数组的指针 指向二维数组的指针指向二维数组的指针 指向一个由指向一个由n个元素所组成的数组指针个元素所组成的数组指针 指针和数组的关系总结指针和数组的关系总结 数组指针和指针数组数组指针和指针数组 1-22指向一维数组的指针指向一维数组的指针指向一维数组的指

14、针是将指针变量指向一维数组的指向一维数组的指针是将指针变量指向一维数组的首地址或者某个元素的地址。首地址或者某个元素的地址。数组元素在内存中是连续存放的,通过指针变量数组元素在内存中是连续存放的,通过指针变量pp及其有关运算可以间接访问数组中的任何一个及其有关运算可以间接访问数组中的任何一个元素。例如:元素。例如:a+i和和pp+i均表示数组元素均表示数组元素ai的地址;的地址;*(pp+i)和和*(a+i)都表示都表示pp+i和和a+i所指向元素的值;所指向元素的值;1-23指向二维数组的指针指向二维数组的指针 将一个指针指向二维数组,需要首先定义一个二维将一个指针指向二维数组,需要首先定义

15、一个二维数组,示例如下:数组,示例如下:char a34=a,b,c,d,e,f,g,h,i,j,k,l;在在C51语言中,这个二维数组语言中,这个二维数组a可以看成是由三个可以看成是由三个一维数组元素组成。一维数组元素组成。其中每个一维数组元素又是一个包含有其中每个一维数组元素又是一个包含有4个元素一个元素一维数组。维数组。1-24指向二维数组的指针指向二维数组的指针二维数组的指针指向示意,如下图所示。二维数组的指针指向示意,如下图所示。对于二维数组对于二维数组a来说,来说,a0、a1、a2可以看成是独立的一可以看成是独立的一维数组名,其分别代表了所对应的数组的首地址。维数组名,其分别代表了

16、所对应的数组的首地址。一般来说一般来说ai+j代表第代表第i行第行第j列元素的地址,即列元素的地址,即&aij。1-25指向一个由指向一个由n个元素所组成的数组指针个元素所组成的数组指针 在在C51语言二维数组可用看成几个一位数组的组合,语言二维数组可用看成几个一位数组的组合,这几个一维数组为二维数组的各个行。这几个一维数组为二维数组的各个行。但是如果需要对列元素进行操作该如何呢?但是如果需要对列元素进行操作该如何呢?在在C51语言中,引入了一个指向由语言中,引入了一个指向由n个元素构成的个元素构成的数组指针。数组指针。这样可以方便二维数组列元素的处理,其定义格式这样可以方便二维数组列元素的处理,其定义格式如下:如下:类型标识符类型标识符(*指针名指针名)n;1-26指针和数组的关系总结指针和数组的关系总结 指针和数组有着十分紧密的关系。指针和数组有着十分紧密的关系。数组和指针的使用方法十分灵活,也很容易混淆,读者应数组和指针的使用方法十分灵活,也很容易混淆,读者应该多加练习。该多加练习。一般来说,任何能由数组和数组下标完成的操作,也都完一般来说,任何能由数组和数组下标完成的操作,也都

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > C/C++资料

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!