单片机c语言指针作用,单片机C语言教程:C51指针的使用
指针就是指变量或数据所在的存储区地址。如一个字符型的变量 STR 存放在内存单元DATA 区的 51H 这个地址中,那么 DATA 区的 51H 地址就是变量 STR 的指针。在 C 语言中指针是一个很重要的概念,正确有效的使用指针类型的数据,能更有效的表达复杂的数据 结构,能更有效的使用数组或变量,能方便直接的处理内存或其它存储区。指针之所以 能这么有效的操作数据,是因为无论程序的指令、常量、变量或特殊寄存器都要存放在内 存单元或相应的存储区中,这些存储区是按字节来划分的,每一个存储单元都能用唯一的 编号去读或写数据,这个编号就是常说的存储单元的地址,而读写这个编号的动作就叫做寻 址,通过寻址就能访问到存储区中的任一个能访问的单元,而这个功能是变量或数组等 是不可能代替的。C 语言也因此引入了指针类型的数据类型,专门用来确定其他类型数据的 地址。用一个变量来存放另一个变量的地址,那么用来存放变量地址的变量称为“指针变量”。 如用变量 STRIP 来存放文章开头的 STR 变量的地址 51H,变量 STRIP 就是指针变量。下面 用一个图表来说明变量的指针和指针变量两个不一样的概念。
变量的指针就是变量的地址,用取地址运算符‘&’取得赋给指针变量。&STR 就是把 变量 STR 的地址取得。用语句 STRIP = &STR 就能把所取得的 STR 指针存放在 STRIP 指 针变量中。STRIP 的值就变为 51H。可见指针变量的内容是另一个变量的地址,地址所属的 变量称为指针变量所指向的变量。
要访问变量 STR 除了能用‘STR’这个变量名来访问之外,还能用变量地址来访 问。方法是先用&STR 取变量地址并赋于 STRIP 指针变量,然后就能用*STRIP 来对 STR 进行访问了。‘*’是指针运算符,用它能取得指针变量所指向的地址的值。在上图中指针 变量 STRIP 所指向的地址是 51H,而 51H 中的值是 40H,那么*STRIP 所得的值就是 40H。 使用指针变量之前也和使用其它类型的变量那样要求先定义变量,而且形式也相类似,
一般的形式如下:
数据类型 [存储器类型] * 变量名;
unsigned char xdata *pi //指针会占用二字节,指针自身存放在编译器默认存储区,指
向 xdata 存储区的 char 类型
unsigned char xdata * data pi; //除指针自身指定在 data 区,其它同上
int * pi; //定义为一般指针,指针自身存放在编译器默认存储区,占三个字节 在定义形式中“数据类型”是指所定义的指针变量所指向的变量的类型。“存储器类型”是编译器编译时的一种扩展标识,它是可选的。在没有“存储器类型”选项时,则定义为一般指针,如有“存储器类型”选项时则定义为基于存储器的指针。限于 51 芯片的寻址范围,指针变量最大的值为 0xFFFF,这样就决定了一般指针在内存会占用 3 个字节,第一字节存 放该指针存储器类型编码,后两个则存放该指针的高低位址。而基于存储器的指针因为不用 识别存储器类型所以会占一或二个字节,idata,data,pdata 存储器指针占一个字节,code,xdata 则会占二个字节。由上可知,明确的定义指针,能节省存储器的开销,这在严格要求程序 体积的项目中很有用处。
指针的使用方法很多,限于篇幅以上只能对它做一些基础的介绍。下面用在讲述常量时的例程改动一下,用以说明指针的基本使用方法。
#include //预处理文件里面定义了特殊寄存器的名称如 P1 口定义为 P1
void main(void)
{
//定义花样数据,数据存放在片内 CODE 区中
unsigned char code design[]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};
unsigned int a; //定义循环用的变量
unsigned char b;
unsigned char code * dsi; //定义基于 CODE 区的指针
do{
dsi = &design[0]; //取得数组第一个单元的地址
for (b=0; b<32; b++)
{
}
}while(1);
}
for(a=0; a<30000; a++); //延时一段时间
P1 = *dsi; //从指针指向的地址取数据到 P1 口
dsi++; //指针加一,
为了能清楚的了解指针的工作原理,能使用 keil uv2 的软件仿真器查看各变量和存储器的值。编译程序并执行,然后打开变量窗口,如图。用单步执行,就能查到到指针的变量。 如图中所示的是程序中循环执行到第二次,这个时候指针 dsi 指向 c:0x0004 这个地址,这个地址 的值是 0xFE。在存储器窗口则能察看各地址单元的值。使用这种方法不但在学习时能 帮助更好的了解语法或程序的工作,而且在实际使用中更能让你更快更准确的编写程序或解 决程序中的问题。
单片机c语言指针作用,单片机C语言教程:C51指针的使用相关推荐
- c语言指针作用一句话,C语言指针是什么?C语言指针的概念。
计算机中所有的数据必须存放在内存中,不同的类型的数据占用的内存字节也不同,int型占4字节,char型占一字节,为了正确访问这些数据,必须为每个一个自己都编上号码,就像仓库一样,每个仓库都会有自己的编 ...
- c语言 定时器作用,单片机定时器的作用及使用方法详解
单片机定时器的作用及使用方法详解 单片机定时器在单片机的功能是很重要的,它一般被用作定时功能,来做定时检测.定时响应和定时控制,并且可以产生毫秒宽的脉冲信号来驱动步进电机.计时和计数的最终功能是通过计 ...
- 计算机c语言的作用,计算机c语言的特性有哪些
计算机c语言的特性有哪些 C语言是世界上最流行.使用最广泛的高级程序设计语言之一,下面小编为大家介绍关于计算机c语言的特性,欢迎大家阅读! 计算机c语言的特性有哪些 1.C是高级语言: 它把高级语言的 ...
- c语言编译作用,叙述 C语言编译
@(C语言)[code] 用一段简单的代码,探讨下从C代码到最终可执行文件的编译过程,追根究底. 偶尔了解下底层,也就没那么多莫名其妙了. 工作原因有时候会用python写写测试工具,感受到其快速实现 ...
- c语言三元组作用,数据结构 C语言 三元组的具体实现
#include #include //定义常量 方便操作 //可能也没多方便 #define Time 1000 typedef int *Triplet; typedef int Status; ...
- stc单片机c语言 pdf,STC单片机C语言程序设计 第13章 STC单片机C语言指针.pdf
STC单片机C语言指针 主讲:何宾 Email :hebin@mail.buct.edu.cn 2016.03 C51编译器中指针的分类 Cx51编译器支持使用字符"*"声明变量指 ...
- 单片机c语言中延时函数的作用,单片机中C语言延时函数
单片机C语言延时程序计算2009-11-02 22:15单片机C语言延时程序用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时 ...
- avr c语言编译器,AVR单片机C语言编译器-20210409071159.docx-原创力文档
鼓新资料推荐 鼓新资料推荐 炭新精詁资料整理推荐 炭新精詁资料整理推荐?更新"ZC二C毎十二月三十一口 2020年12月31 口星期0 19:24:59 鼓新资料推荐 鼓新资料推荐 炭新精詁 ...
- dac梯形波c语言编程,单片机项目第11章单片机与AD接口.ppt-资源下载在线文库www.lddoc.cn...
单片机项目第11章 单片机与AD接口.ppt 第11章 单片机与AD接口,11.1 项目内容数字电压表的设计 11.2 程序设计 11.3 相关知识,11.1 项目内容数字电压表的设计,11.1.1 ...
最新文章
- struts2_对Map进行双层迭代
- java jdbc 链接pg_Java零基础教程
- 排序之二分查找插入排序算法
- 大势至电脑文件防泄密软件_有了数据防泄密软件,还会担心企业文件泄漏吗?...
- Mybatis常见面试题总结(详细)
- java quartz CronScheduleBuilder
- 关于组装电脑装win10不得不说的小故事
- linux通用内核,重新编译内核 - Linux通用系统优化大全_Linux教程_Linux公社-Linux系统门户网站...
- BeatSaber节奏光剑双手柄MR教程
- python算法之罗马数字转换阿拉伯数字
- POJ 1008 玛雅日历
- docker部署consol 集群
- Complementary Trilateral Decoder for Fast and Accurate Salient Object Detection(速读啊)内含与u-shape的对比
- MXNet对DenseNet(稠密连接网络)的实现
- 5 kyu some egyptian fractions
- Java使用aspose批量将PDF转为word
- python写api接口实战
- Cisco三层交换机配置命令及解释
- android 比较符合android构架,优雅的定义全局变量
- 玩转NVIDIA Jetson AGX Xavier