51单片机实战教程之C语言基础(四 C语言变量定义)

48 篇文章 19 订阅

       C语言中的特殊数据类型包含:结构体、枚举、公用体(联合)、数组、指针。特殊数据类型的定义与变量定义相类似。C语言是强类型语言必须先定义后使用。下面演示变量及数据类定义及使用:

  1. 变量与常量的定义

     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; // 通过指针访问机构体的内部变量,并赋值

       

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bill66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值