内容正文:
任务5 指针的定义及引用
1.了解数组、指针的定义。
2.掌握指向数组的指针的引用。
3.掌握利用数组的指针控制单片机I/O口的方法。
在C51中,指针是被广泛使用的一种特殊数据类型。通过指针可以间接地访问另一变量,方便地使用字符串,有效地使用数组,可使程序更加精炼、高效。本任务以用数组的指针控制单片机的I/O口为例,学习掌握指向数组的指针的引用方法,从而体会指针在C51中的重要意义。
一、数组的定义与引用
1.一维数组
类型说明符 数组名[常量] ┇ 如 int a[10];
一维数组的赋值方法有以下几种:
(1)在数组定义时赋值
[例] int a[10] = { 0,1,2,3,4,5,6,7,8,9 } ;
在a[10]中,10表示a数组中有10个元素,下标从0开始,依次是 a[0]=0,a[1]=1,……,a[9]=9,数组中的有效数据只有10个。
(2)数组元素部分赋值
[例]int b[10] = { 0,1,2,3,4 } ;
定义整型数组b,共包含10个元素,只对前5个元素作了定义,后5个元素值均为0。
(3)全部数组元素都已赋值,可省去方括号中的下标
[例] int c[ ] = { 0,1,2,3,4,5,6,7 } ;
若被定义的数组长度(常量)与实际数组中的元素个数不相等,则数组长度不能省略。
2.字符数组
用来存放字符型数据的数组称为字符数组。字符数组的赋值方法有以下几种:
[例] char a[5] = { 'H', 'E', 'L', 'L', 'O' } ;
定义字符型数组a,它包含了a[0] ~ a[4]共5个字符元素。
(1)在定义时进行初始化赋值
(2)用字符串的形式对全体字符数组元素进行赋值
[例] char str[ ] = { "Hello,word!" } ;
或者
char str[ ]= " Hello,word! " ;
字符串是以'\0'作为结束标志,且并不显现出来。当定义了一个字符串数组后,系统会自动将结束标志'\0'存入数组,因此,上面定义的字符串数组"str[]"最后一个元素不是'!',而是'\0'。
二、指针
指针就是一个变量,它包含着另一个变量的地址。C语言中提供了两个专门用于指针和地址的运算符,见下表:
运算符 意义 运算符 意义
* 取内容 & 取地址
1.指针的定义格式
类型说明符 * 指针变量名
[例] unsigned int *p; //定义无符号整型指针,变量名为p
2.指针的初始化
指针在使用前必须要进行初始化,要使一个指针变量指向一个变量,可以使用取地址运算符“&”来完成。
[例] unsigned int m; //定义一个无符号整型变量m
unsigned int *p; //定义无符号整型指针变量p
p=&m; //&m表示m的地址,将m的地址存放在
// 指针变量p中(即指针p指向m)
指针在使用前要先定义指针变量类型。一个指针变量只能指向同一个类型的变量,不要将非指针类型的变量赋值给一个指针变量,如整型指针不能指向字符型变量,且指针变量中只能存放地址。
一、程序设计
本任务中为观察到单片机的I/O口(P1)上的高电平由低位到高位的有序变化,定义数组如下:
unsigned char table[8]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
要实现指针指向该数组,指针的初始化为:
unsigned char *p; //定义无符号字符型指针变量puchar
table[8] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//定义一维数组table
p=&table[0] ; 或
p=table; //将数组table的首地址存放到指针变量p中
1.载入源文件,当编译无误后单击调试按钮,将自动弹出“debug”工具栏,单击菜单栏中的“Periphe