基于proteus的51单片机仿真实例四十九、C语言数组的指针演示实例

来源:互联网 发布:mac版inode如何上网 编辑:程序博客网 时间:2024/06/08 14:20

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中,启动仿真,观察运行结果。某一时刻的运行结果如下图所示。


0 0
原创粉丝点击