单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51

通常认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上,甚至认为指针是C语言的灵魂。这里说通常,是广义上的,因为随着编程语言的发展,指针也饱受争议,并不是所有人都承认指针的“强大”和“优点”。在单片机领域,指针同样有着应用,本章节针对Keil C-51环境下的指针意义做简要分析。

1 指针与变量

指针是一个变量,它与其他变量一样,都是RAM中的一个区域,且都可以被赋值,如程序①所示。

#include "REG52.H"

unsigned int j;

unsigned char *p;

void main()

{

while(1)

{

j=0xabcd;

p=0xaa;

}

}

在Debug Session模式下,将鼠标指针移到到变量“j”“p”位置,可以显示变量的物理地址,如图1-1、1-2所示。

单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51_第1张图片

单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51_第2张图片

图中箭头所指处即为变量在RAM中的“首地址”,为什么是“首地址”呢?变量根据类型可分为8位(单字节)、16位(双字节),程序中变量“j”是无符号整型,所占物理空间应为2字节,而在8位单片机中,RAM的一个存储单元大小是8位,即1字节,因此需2个存储单元才满足变量“j”长度。所以实际上变量“j”的物理地址为“08H”“09H”。同理,“p(D:0x0A)”即变量“p”的首地址为“0AH”。

下面通过单步执行程序来观察RAM内的数据变化,打开两个Memory Windows窗口,在Keil软件下方显示为Memory1和Memory2,在两个窗口中,分别做如图2-1、2-2所示的设置。

单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51_第3张图片

单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51_第4张图片

两个Address填写的内容分别是:D:0x08、D:0x0A,即变量“j”和变量“p”的首地址,输入后回车,便可监视RAM中该地址下的数据。设置好后,准备调试。

在Debug Session模式中,箭头所指处即为即将执行的语句,单击“Step”功能按钮(或按F11键),让程序运行,如图3所示。

单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51_第5张图片

第一次单击“Step”按钮后,Memory1窗口内数据如图4所示。

单片机c语言指针作用,单片机C语言指针意义浅析—Keil-C51_第6张图片

由调试结果可知,08H数据由00H变为ABH,09H数据由00H变为CDH,出现这种变化是因为执行了语句j=0xabcd;08H为变量“j”高八位,存储“AB”,09H为变量“j”低八位,存储“CD”。

第二次单击“Step”按钮,执行语句:p=0xaa;此时需观察Memory2窗口内

你可能感兴趣的:(单片机c语言指针作用)