第8章指针00001.ppt
《第8章指针00001.ppt》由会员分享,可在线阅读,更多相关《第8章指针00001.ppt(24页珍藏版)》请在三一办公上搜索。
1、第8章 指针,指针是变量在计算机或单片机内所占有的存贮区域的地址。C51语言中广泛使用的指针概念是从C语言中继承下来的,利用指针变量不但可以操作各种基本的数据类型和数组等复合数据结构,而且能像汇编语言一样,具有处理单片机内存地址的能力。在C51程序中,访问或修改变量可以通过两种方式来实现。一种是直接访问或修改这块区域的内容来实现的,另一种是先求出变量的地址,然后再通过地址对该变量的值进行访问,这就是本节所要讲解的指针及指针变量。,8.1 地址、指针和指针变量的概念,地址是单片机内存单元的编号。其中内存单元是单片机存储器中的最小存储单位,通常一个字节称为一个内存单元。当为内存单元逐个编号后,便可
2、以根据一个内存单元的编号即可准确地找到该内存单元及其中的数据。指针实际上也是一个地址,其表示的是一个变量在内存中的首地址。单片机中的数据都是存放在存储器中的,不同的数据类型所占用的内存单元数和它的大小有关。在C51语言中,根据数据类型或数据结构的不同,一个变量往往都占有一组连续的内存单元,单用“地址”这个概念并不能很好地描述这个变量,从而引进了“指针”的概念。指针是指向一个数据结构的首地址,因而概念更明确,寻址更方便。,8.2 指针变量的声明,指针变量的声明与一般变量的声明相似,声明指针变量的一般形式为:类型标识符*指针名1,*指针名2,;其中前面的“类型标识符”表示该指针变量所指向的变量的类
3、型,即指针变量的类型。典型的指针变量的声明示例如下:int*p1;/p1是指向整型变量的指针变量char*p2;/p2是指向字符变量的指针变量float*p3;/p3是指向浮点变量的指针变量,8.3 指针变量的赋值,指针变量被声明后可以指向任何同类型的变量。如果定义指针变量时不进行初始化,编译系统不能确定它具体的指向,此时该指针变量被初始化为NULL,它的值为0。这里需要强调的是,未经赋值的指针变量不能在程序中使用,否则将由指针指向错误导致整个程序的混乱。另外,指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。在C51语言中,不知道变量的具体地址,变量的首地址是由编译系统分配
4、的。为此,C51语言中提供了地址运算符“&”,可以获取变量的首地址。其一般形式如下:&变量名,8.3.1 初始化赋值,假设有指向整型变量的指针变量p和整型变量a,如要把整型变量a的地址赋予p,可以采用初始化赋值,示例如下:int a;int*p=/初始化赋值,&a表示取变量a的首地址,8.3.2 取地址赋值,假设有指向整型变量的指针变量p和整型变量a,如要把整型变量a的地址赋予p,可以采用取地址赋值,示例如下:int a;int*p;p=/利用&a获得变量a的首地址,然后赋值给p,8.3.3 指针之间赋值,把一个指针变量的值直接赋予相同类型变量的另一个指针变量。示例如下:int a=5,b=6
5、;/定义变量和初始化int*p1=/把p1指向的内容赋给p2所指的区域,8.3.4 数组赋值,把数组的首地址赋予指向数组的指针变量。示例如下:int a5,*p;/声明数组以及指针变量p=a;/数组名表示数组的首地址,故可赋予指向数组的指针变量由于数组在内存中是连续存放的,数组的首地址即数组中第一个元素的地址,因此也可写为:p=/声明数组及指针变量并进行初始化赋值,8.3.5 字符串赋值,把字符串的首地址赋予指向字符类型的指针变量。示例如下:char*p;/声明字符型指针变量p=This is a test;/赋值也可以采用初始化赋值的方法写为:char*p=This is a test;这里
6、应注意的是,该语句并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。,8.3.6 函数入口赋值,把函数的入口地址赋予指向函数的指针变量。示例如下:int(*pfun)();pfun=fun;/f为函数名在C51语言中,指针变量若不带初始化项,其将被初始化为NULL,其值为0。这一点与一般变量类似。当指针变量的值为零时,表明该指针不指向任何有效数据,此时称为“空指针”。空指针常用于调用一个带有返回指针的函数时,如果返回值为NULL,则指示该函数调用中出现某些错误情况。,8.4 指针变量的引用,指针变量的引用即通过指针变量来间接访问其所指向的变量。引用指针变量需要首
7、先声明该指针变量。与指针变量的引用有关的两个运算符如下:,8.4.1 取地址运算符“&”,取地址运算符“&”用于取变量的地址。取地址运算符是单目运算符,符合自右至左的结合性。在上一小节中,已经使用了&运算符。对指针变量的引用形式为:&变量名其中,在“&”运算符之后跟的变量必须是所要取址的变量。该语句的含义是获得变量在单片机实际内存中的地址。,8.4.2 取内容运算符“*”,取内容运算符“*”用来表示指针变量所指向内存中的数据内容。取内容运算符也是单目运算符,符合自右至左的结合性。对指针变量的引用形式为:*指针变量名其中,在“*”运算符之后跟的变量必须是指针变量。该语句的含义是获得指针变量所指向
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 00001
链接地址:https://www.31ppt.com/p-5295518.html