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。原理圖如下圖所示
8、將ex37.hex文件載入at89c51中,啓動仿真,觀察運行結果。某一時刻的運行結果如下圖所示。