指针和指针变量(第17课)讲解

上传人:我** 文档编号:116945268 上传时间:2019-11-17 格式:PPT 页数:22 大小:288.50KB
返回 下载 相关 举报
指针和指针变量(第17课)讲解_第1页
第1页 / 共22页
指针和指针变量(第17课)讲解_第2页
第2页 / 共22页
指针和指针变量(第17课)讲解_第3页
第3页 / 共22页
指针和指针变量(第17课)讲解_第4页
第4页 / 共22页
指针和指针变量(第17课)讲解_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《指针和指针变量(第17课)讲解》由会员分享,可在线阅读,更多相关《指针和指针变量(第17课)讲解(22页珍藏版)》请在金锄头文库上搜索。

1、 学习内容 第五章第五章 指指 针针 1 1. . 理解指针和指针变量理解指针和指针变量 2. 2. 理解指针与数组理解指针与数组 3 3. . 指针与函数指针与函数 4.C514.C51语言中的指针应用语言中的指针应用 指针作用 l 正确的使用指针类 型数据,可以有效地表示 复杂的数据结构,直接处 理内存地址,可以更有效 合理的使用数组。 一、指针和指针变量 void main() float x=3.14; int y=25; 变量的两个物理意义:(变量的两个物理意义:(1 1)变量的地址()变量的地址(2 2)变量的内容)变量的内容 20002000 20012001 20022002

2、20032003 20042004 20052005 x x y y 变量的内容 变量的地址 3.143.14 2525 变量的地址:指编译器为变量所分配的存储区域的变量的地址:指编译器为变量所分配的存储区域的首地址首地址。 变量的内容:指变量所对应的存储区域的内容,即变量的内容:指变量所对应的存储区域的内容,即变量的值变量的值。 void main() int a,b,c; a=5; b=3; c=a +b; 3030 3131 3232 3333 3434 3535 a a b b c c 5 直接将整数直接将整数 5 5 存入变量存入变量 a a 3 直接将整数直接将整数 3 3 存入变

3、量存入变量 b b 8 直接直接将变量将变量 a a、b b 的值的值 取出,相加后存入变量取出,相加后存入变量 c c 利用变量名存取数据的方利用变量名存取数据的方 式称为式称为“ “直接访问直接访问” ”方式。方式。 1 1、利用变量名对存储单元进行访问、利用变量名对存储单元进行访问 一、指针和指针变量 一、指针与地址的关系 l单片机程序中的常量和变量都要存放在以 字节为单位的内存单元中。 l单片机是按照地址来访问该单元的内容的 。 l如果将欲访问单元的地址存放在另一个单 元中,访问时先找到存放地址的单元,才能 找到需要访问的单元,这种“间接访问”方式 需要用到指针。 l指针数据类型:是专

4、门用来存放其他数据 类型地址的。 p p 20002000 20012001 20022002 20032003 20042004 20052005 20062006 20072007 20082008 a a b b c c 5 3 2004 a a和和b b相加的结果相加的结果( (* *p p= =a a+ +b b) )存放存放 到变量到变量p p所指向的所指向的内存单元内存单元中去。中去。 此时此时c c称为指针变量称为指针变量p p的的目标变量目标变量 。 p p 20042004 c c p p= a=5,b=3,c,*p; p = p = *p = a + b; *p = a

5、+ b; 变量的变量的地址地址称为变量的称为变量的指针指针 存放地址的变量称为存放地址的变量称为指针变量指针变量 2 2、利用指针对存储单元进行访问、利用指针对存储单元进行访问间接访问方式间接访问方式 一、指针和指针变量 void main() int a,*p= float x,*q= 20002000 20012001 20022002 20032003 20042004 20052005 20062006 20072007 20082008 20092009 a a p p x x q q 2004 2000 void main()void main() intint a,*p; a,*

6、p; float x,*q; float x,*q; p = p = q = q = 指针变量定义的形式指针变量定义的形式 指针变量初始化指针变量初始化 类型标识符类型标识符 * *指针变量名指针变量名; ; float x,*q= *p = 5; printf(“a+3=%dn“,*p+3 ); 1 1、间接存取运算、间接存取运算 20002000 20012001 20022002 20032003 20042004 20052005 20062006 20072007 20082008 20092009 a a p p x x q q 2004 2000 *p = void main()

7、void main() intint a,*p1 a,*p1,* *p2;p2; float x,*q; float x,*q; p1 = p1 = q = q = p2=p1; p2=p1; 2 2、赋值运算、赋值运算 5 * *-取内容运取内容运 算符算符( (间接访间接访 问运算符问运算符) ) 一、指针和指针变量 l例:有个整型变量n 存放在内存单元60H中 ,则该内存单元地址 60H,就是变量n的指针 。 l 指针变量概念: 如果一个变量专门用来 存放另一个变量的地址 ,则该变量称为指针变 量。 二、指针变量的定义 l指针变量必须先定义后使用。 l定义的一般形式为: l数据类型 存储

8、器类型 *指针变量名; l数据类型为指针变量所指向的变量的类型 。 l指针变量名为定义的指针变量的名字。 l存储器类型为可选项,默认为三个字节, idata、data、pdata为一个字节,code为 两个字节。 l例:int *pt; l定义一个指向对象类型为int的一 般指针,指针长度为3个字节。 lchar data *pa; l定义一个指向对象类型为char的 基于data的指针,指针长度为1个 字节。 l注意: l变量的指针:即变量的地址。 l指针变量:一个变量里面存放另一个变量 的地址。 l每一个变量都有它自己的指针(地址)。 l每一个指针变量都是指向另一个变量的地 址。 l“*”

9、表示指向。 三、指针变量的引用 l指针变量中只能存放地址。 l在C51中,变量的地址和指针变量的地址 都是不可见的。 l“ l int *pt; l pt= l使用“直接访问 lint *pt; lpt= lx = *pt; 例例 四、数组指针 l数组及其元素同样占有存储单 元,都有相应的地址,指针也 可以指向数组。 l指向数组的指针是数组的首地 址。 l指向数组元素的指针则是数组 元素的地址。 l例:定义一个数组x8和一个指向数组的 指针变量px. lInt x8; lInt *px; l;此时数组和指针变量没有关系。 l若px=则指针变量即指向数组x 。 lC语言规定,数组名代表数组的首地

10、址, 即第一个数组元素的地址。 五、指针变量的运算 lInt x8; lInt *px; lpx= l1、px+;将指针变量px指向下一个 数组元算x1; l2、*px+; 等价于*(px+)。 l3、*+px;等价于*(+px);先使px加1 ,再取出*px的值。 l4、(*px)+;表示所指向的元算 值加1。 l5、特别注意:px+1. C规定: px+1指向数组首地址的下一个元素 ;而不是将指针变量px的值简单地 加1. 指针应用举例 指针应用举例 l例1:将片内RAM30H单元开始的15B数 据传送到片外RAM 3000H开始的单元中去 。 汇编语言程序如下:汇编语言程序如下: ORG

11、 0000HORG 0000H LJMP MAINLJMP MAIN ORG 0100HORG 0100H MAIN:MAIN:MOV R0,#30HMOV R0,#30H MOV DPTR,#3000HMOV DPTR,#3000H MOV R7,#15MOV R7,#15 LOOP: LOOP: MOV A,R0MOV A,R0 MOVX DPTR,AMOVX DPTR,A INC R0INC R0 INC DPTRINC DPTR DJNZ R7,LOOPDJNZ R7,LOOP SJMP $SJMP $ ENDEND C51C51语言程序如下:语言程序如下: void main() c

12、har idataidata *pi=0x30; char xdataxdata *px=0x3000; unsigned char i; for(i=0;i15;i+) *px+=*pi+; /等价于*(px+)=*(pi+); while(1); 指针应用举例 l例2:片内RAM30H开始的单元中有10B 二进制数据,编程求它们之和(和256), 并将和存于内部RAM40H单元中。 汇编语言程序如下:汇编语言程序如下: ORG 0000HORG 0000H LJMP MAINLJMP MAIN ORG 0100HORG 0100H MAIN:MAIN:MOV R0,#30HMOV R0,#30H MOV R7,#10MOV R7,#10 CLR ACLR A LOOP: LOOP: ADD A,R0ADD A,R0 INC R0INC R0 DJNZ R7,LOOPDJNZ R7,LOOP MOV 40H,AMOV 40H,A SJMP $SJMP $ ENDEND C51C51语言程序如下:语言程序如下: void main() char idataidata *pi=0x30; unsigned char i; char sum=0; for(i=0;i10;i+) sum+=*pi+; pi=0x40; *pi=sum; while(1);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号