- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章指针00001ppt课件
第8章 指针 指针是变量在计算机或单片机内所占有的存贮区域的地址。C51语言中广泛使用的指针概念是从C语言中继承下来的,利用指针变量不但可以操作各种基本的数据类型和数组等复合数据结构,而且能像汇编语言一样,具有处理单片机内存地址的能力。 在C51程序中,访问或修改变量可以通过两种方式来实现。一种是直接访问或修改这块区域的内容来实现的,另一种是先求出变量的地址,然后再通过地址对该变量的值进行访问,这就是本节所要讲解的指针及指针变量。 8.1 地址、指针和指针变量的概念 地址是单片机内存单元的编号。其中内存单元是单片机存储器中的最小存储单位,通常一个字节称为一个内存单元。当为内存单元逐个编号后,便可以根据一个内存单元的编号即可准确地找到该内存单元及其中的数据。 指针实际上也是一个地址,其表示的是一个变量在内存中的首地址。单片机中的数据都是存放在存储器中的,不同的数据类型所占用的内存单元数和它的大小有关。在C51语言中,根据数据类型或数据结构的不同,一个变量往往都占有一组连续的内存单元,单用“地址”这个概念并不能很好地描述这个变量,从而引进了“指针”的概念。指针是指向一个数据结构的首地址,因而概念更明确,寻址更方便。 8.2 指针变量的声明 指针变量的声明与一般变量的声明相似,声明指针变量的一般形式为: 类型标识符 *指针名1, *指针名2,…; 其中前面的“类型标识符”表示该指针变量所指向的变量的类型,即指针变量的类型。 典型的指针变量的声明示例如下: int *p1; //p1是指向整型变量的指针变量 char *p2; //p2是指向字符变量的指针变量 float *p3; //p3是指向浮点变量的指针变量 8.3 指针变量的赋值 指针变量被声明后可以指向任何同类型的变量。如果定义指针变量时不进行初始化,编译系统不能确定它具体的指向,此时该指针变量被初始化为NULL,它的值为0。 这里需要强调的是,未经赋值的指针变量不能在程序中使用,否则将由指针指向错误导致整个程序的混乱。另外,指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。 在C51语言中,不知道变量的具体地址,变量的首地址是由编译系统分配的。为此,C51语言中提供了地址运算符“”,可以获取变量的首地址。其一般形式如下: 变量名 8.3.1 初始化赋值 假设有指向整型变量的指针变量p和整型变量a,如要把整型变量a的地址赋予p,可以采用初始化赋值,示例如下: int a; int *p=a; //初始化赋值,a表示取变量a的首地址 8.3.2 取地址赋值 假设有指向整型变量的指针变量p和整型变量a,如要把整型变量a的地址赋予p,可以采用取地址赋值,示例如下: int a; int *p; p=a; //利用a获得变量a的首地址,然后赋值给p 8.3.3 指针之间赋值 把一个指针变量的值直接赋予相同类型变量的另一个指针变量。示例如下: int a=5,b=6; //定义变量和初始化 int*p1=a,*p2=b; //定义指针变量和初始化 p2=p1; //把a的地址赋予指针变量p2 *p2=*p1; //把p1指向的内容赋给p2所指的区域 8.3.4 数组赋值 把数组的首地址赋予指向数组的指针变量。示例如下: int a[5],*p; //声明数组以及指针变量 p=a; //数组名表示数组的首地址,故可赋予指向数组的指针变量 由于数组在内存中是连续存放的,数组的首地址即数组中第一个元素的地址,因此也可写为: p=a[0]; //数组第一个元素的地址也是整个数组的首地址 同样,采取初始化赋值的方法为指针变量进行赋值,示例如下: int a[5],*p=a; //声明数组及指针变量并进行初始化赋值 8.3.5 字符串赋值 把字符串的首地址赋予指向字符类型的指针变量。示例如下: char *p; //声明字符型指针变量 p=This is a test; //赋值 也可以采用初始化赋值的方法写为: char *p=This is a test; 这里应注意的是,该语句并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。 8.3.6 函数入口赋值 把函数的入口地址赋予指向函数的指针变量。示例如下: int (*pfun)(); pfun=fun; //f为函数名 在C51语言中,指针变量若不带初始化项,其将被初始化为NULL,其值为0。这一点与一般变量类似。当指针变量的值为零时,表明该指针不指向任何有效数据,此时称为“空指针”。空指针常用于调用一个带有返回指针的函数时,如果返回值为NULL,
文档评论(0)