赞
踩
C语言中的特殊数据类型包含:结构体、枚举、公用体(联合)、数组、指针。特殊数据类型的定义与变量定义相类似。C语言是强类型语言必须先定义后使用。下面演示变量及数据类定义及使用:
1.1变量 在程序运行过程中其值可以改变的量就是变量。变量的定义格式如下:
[存储类型] 数据类型 [存储器类型] 变量名
[]部分不是必须的。 变量有命名规则,与标识符命名规则一致。
存储类型有: auto, extern, static, register 四种。系统默认是auto
Keil C51寄存器类型如下表:
Keil C51标识符名命名规则:
1). 变量名的开头必须是字母或下划线,不能是数字.
2). 变量名不得使用Keil C51的保留字,为标准C的保留字+Keil扩展保留字。标准C的保留字(关键字)如下表:
Keil Cx51的扩展保留字如下:
3). 变量名中的字母是区分大小写的。
变量定义示例:
char mData = 0x0F;//定义变量的同时,赋初值。
static char flag = 0; //静态变量定义时,必须赋初值
char a, b, c; //非静态变量可以不赋初值
extern char data myValue; //myValue 在别的程序中已定义
1.2 常量
有变量就有常量,在运行过程中值不能改变的量, 称为常量。编程过程中经常会用到常量,如π值,单片机频率,运放的放大倍数等。直接出现的常量为直接常量。用符号来表示,称为符号常量。符号常量也许遵从标识符命名规则。
符号常量的定义方法:
1.2.1 使用宏定义 示例:#define PI 3.1415926
1.2.2 变量命名法+const修饰 示例:const float PI= 3.1415;
2. 结构体定义及其使用示例
2.1 结构体定义 定义格式: struct 结构体体名{xxx};
示例:
struct worker{
unsigned int w_Num;
unsigned char age;
};//结构体名也是标识符,也需遵从标识符的命名规则,结构型数据定义,以分号结尾
2.2 结构体使用 结构体定义(声明)完成后,还需定义结构体对象, 通过对象访问内部成员变量。
示例:
struct worker zhangshang, lisi;
zhangshang.w_Num =190;
lisi.w_Num = 191;
zhangshang.age = 30;
lisi.age = 32;
3 . 枚举的定义及使用 枚举的定义与结构体的定义方法类似。
示例:
3.1 定义
typedef enum
{
Pin0 = 0x01,
Pin1 = 0x02,
Pin2 = 0x04,
Pin3 = 0x08,
Pin4 = 0x10,
Pin5 = 0x20,
Pin6 = 0x40,
Pin7 = 0x80
} iOPin; //枚举内部数据以逗号做分隔符
3.2 使用
void InitPort(char port, ioPin mypin); //定义的枚举限制mypin的取值范围。
4. 共用体(union)的定义及使用 与共用体的定义方法相似,格式:union 公用体名 { XXX};
4.1 定义示例:
union adResult
{
unsigned int result;
char data[2];
};
4.2 使用示例 公用体在8位单片机处理AD转换结果非常有用,一般单片机的AD都是10位或以上,AD结果分开存储在两个寄存器中,一个存高位一个存低位,定义前面共用体,将寄存器值分别读入char数组,就刚好组成AD值。
int GetAdRes()
{
adResult myRes;
myRes.data[0] = 0x13;
myRes.data[0] = 0x10;
return myRes.result;
}
5. 数组定义(或声明)及使用
5.1 一维数组 定义格式:数据类型 数组名[ 常量表达式];
示例:
int data[20];
int i;
for(i = 0; i< 20; i++)
{
data[i] = i;
}
5.2 二维数组 定义格式:数据类型 数组名[ 常量表达式][ 常量表达式];
示例:
int pointArray[10][10];
int i, i;
for(i = 0; i <10; i++)
{
for(j = 0; j <1 0; j++)
pointArray[i][j] = i+j;
}
6. 指针变量定义及使用 定义格式: 数据类型 * 变量名;
示例:
int a = 5;
int* pint;
worker* pworker;
pint = &a; //获取变量a的地址
*pint = 10; //通过改变指针指向内存地址里的内容改变a的值
pworker -> age = 30; // 通过指针访问机构体的内部变量,并赋值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。