基于proteus的51单片机仿真实例四十九、C语言数组的指针演示实例
1、指向数组的指针
一个变量有地址,一个数组元素也有地址,所以可以用一个指针指向一个数组元素。如果一个指针存放了某数组的第一个元素的地址,就说该指针是指向这一数组的指针。数组的指针即数组的起始地址。例如:
unsigned char a[]={0,1,2,3};
unsigned char *p;
p=&a[0];将数组a的首地址存放在指针变量p中。
经上述定义后,指针p就是数组a的指针。C语言规定,数组名代表数组的首地址,也就是第一个元素的地址。所以p=&a[0];可以写作p=a;
p指向数组a的首地址后,p+1就指向数组的第二个元素a[1];依此类推,p+i指向第i个元素。
引用数组元素可以用数组元素的下标(如a[i]),但使用指针速度更快,且占用内存少。这也是使用指针的优点和精华所在。
2、本实例使用指针数组控制P0口的8位LED循环点亮。
3、在keil c51中新建项目ex38,编写如下程序代码,编译并生成ex38.hex文件。
//实例38:用数组的指针控制P0口的8位LED循环点亮
#include <reg51.h> //包含头文件
void delay(void) //延时函数
{
unsigned char i,j;
for(i = 0;i < 250;i++)
for(j = 0;j <250;j++);
}
void main(void)
{
unsigned char i;
unsigned char num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//定义一个数组,并初始化
unsigned char *p; //定义一个指针
p=num; //指针初始化,将数组num的首地址存入指针p
while(1)
{
for(i = 0;i < 8;i++) //循环8次
{
P0 = *(p+i); //*(p+i)的值等于num[i],通过指针引用数组元素的值
delay();
}
}
}
4、在proteus中新建仿真文件ex38.dsn。原理图如下图所示
5、将ex38.hex文件载入at89c51中,启动仿真,观察运行结果。某一时刻的运行结果如下图所示。