| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 51单片机实战教程之学习起步(四C语言特殊数据类型及变量定义) -> 正文阅读 |
|
[嵌入式]51单片机实战教程之学习起步(四C语言特殊数据类型及变量定义) |
? ? ? ?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; // 通过指针访问机构体的内部变量,并赋值 ? ? ? ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:30:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |