指针可以指向某类变量,也可以指向数组。以指针变量为元素的数组,称为指针数组。这些指针变量应具有相同的存储类型,并且指向的数据类型也必须相同。
指针数组定义的一般格式如下:
类型说明符 *指针数组名[元数个数] ;
示列如下:
char *p[3]; //p[3]是含有p[0]、p[1]和p[2]三个指针的指针数组,指向char 型数据
?指针数组同样可以在定义时同时进行初始化,如下:
unsigned int num[]={0,1,2,3};
unsigned int *p[4]={&num[0],&num[1],&num[2],&num[3]};//&是取地址操作符,注意指针数组存放的元素必须是地址
用P2口显示指针运算结果:
本实例进行一个简单的指针数组运算:"*p[0]+*p[1]+*p[2]+*p[3]*3",并用p2口显示运算结果,仿真程序代码如下:
#include <reg51.h>
void main()
{
unsigned int num[]={0,1,2,3};//定义一个无符号整型数组num,并初始化,该数组含有四个元素
unsigned int *p[4]={&num[0],&num[1],&num[2],&num[3]};//分别把数组num的四个元素的地址赋给指针数组p的四个指针变量。
P2=*p[0]+*p[1]+*p[2]+*p[3]*3;
while(1)
;
}
基于Protues的仿真结果如下:结果用二进制数表示,亮灯表示该位是1,熄灯表示该位是0.
?根据图中的仿真结果可知式子:*p[0]+*p[1]+*p[2]+*p[3]*3的计算结果是 0000 1100,转换为十进制为12.由于指针p[0],p[1],p[2],p[3],分别指向数组num的四个元素地址,所以式子*p[0]+*p[1]+*p[2]+*p[3]*3=num[0]+num[1]+num[2]+num[3]*3=0+1+2+3*3=12 。计算结果和仿真结果一至。所以指针引用正确。
|