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

1、指针可以指向某类变量,也可以指向数组。以指针变量为元素的数组称为指针数组。这些指针变量应具有相同的存储类型,并且指向的数据类型也必须相同。

2、指针数组定义的一般格式如下:

类型说明符 *指针数组名[元素个数];

例如:int *p[2];p[2]是含有p[0]和p[1]两个指针的指针数组,指向int型数据。

3、指针数组的初始化可以再定义的同时进行初始化,例如:

unsigned char a[]={0,1,2,3};

unsigned char *p[4]={&a[0],&a[1],&a[2],&[3]};存放的元素必须为地址。

5、本实例使用指针数组控制P0口的8位LED循环点亮。

6、在keil c51中新建项目ex37,编写如下程序代码,编译并生成ex37.hex文件。

 //实例37:用指针数组控制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 num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  
                      // 定义无符号字符型数组,同时赋初值
 unsigned char *p[]={&num[0],&num[1],&num[2],&num[3],
                     &num[4],&num[5],&num[6],&num[7]};
      //将指针数组中的各个元素指向num数组中每个元素的对应地址,
      //初始化指针数组
 unsigned char i;

 while(1)
 {
   for(i = 0;i < 8;i++)    // 循环8次
  {
    P0 = *p[i];      //指针数组所指向的元素送P0口显示
   delay();
  }
 }

}

7、在proteus中新建仿真文件ex37.dsn。原理图如下图所示

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

8、将ex37.hex文件载入at89c51中,启动仿真,观察运行结果。某一时刻的运行结果如下图所示。

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