8.1.1.6 变量

 程序执行过程中,值可以改变的量称为变量。变量代表内存中具有特定属性的一个内存单元,用来存放数据,也就是变量的值,在程序的运行的过程中这些值是可以被改变的。程序中所有用到的变量,都必须在程序中指定其数据类型,变量必须是先定义后使用。变量的类型有:bool型变量、byte型变量、int型变量、float型变量、double型变量、string型变量(亦TEXT型变量)。

M语言的变量分为四种形式:组态变量、自定义变量、自定义数组变量、位变量。

u  组态变量

    组态变量指的是使用变量管理器生成的变量(组态变量生成参考第五章 变量设计),组态变量不需要申请就可以在程序中直接使用。因为组态工程初始化运行时,系统已经为组态变量根据其相应的数据类型分配相应的内存大小。

u  自定义变量

    自定义变量指的是程序语言里单独指定类型的变量,这些变量的作用域仅仅为当前的脚本语言,当前的程序语言执行完成后,自定义变量自动销毁释放,相当于局部变量。

    自定义变量必须在程序语言中申请才能够使用(参与运算、赋值等操作),变量申请格式为:

 类型说明符     变量表;

 其中:类型说明符可以是boolbyteintfloatdoublestring变量表是想要声明的变量名称的列表,M语言执行一个类型说明符之后同时申请多个具有相同类型的变量,此时各个变量名之间要有逗号“ ,”分隔开。例如:

int  a,  b23,  c_123;

其中,int为类型说明;ab23c_123为三个变量名,之间用逗号分隔。

这个变量定义说明了有3个相同类型的变量、变量叫什么名称(ab23c_123)以及用来做什么(参与整型数据的处理)。任意一个变量都必须具备确定的数据类型,不管变量值怎样变化,都必须符合该类数据类型的规定。

u  自定义数组变量

    自定义数值变量和自定义变量类似,通常用于表示固定多个同类型的具有线性次序关系的数据。

Ø  数组的申请

数组变量的定义格式为:

< 数据类型 >  < 数组名 >  [< 整型常量 >] ;

其中,数据类型指定了数组元素的数据类型,必须是M语言定义的数据类型;数组名的命名规则应符合变量的名字规则;整型常量规定了数组元素的个数,即数组长度;[] 表示定义数组。

例如:

int  a[10]; // a中可存放10个整数,它们分别是a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]

        //a数组中的每个元素都是整型变量。

   注释:对一个有n个元素的数组,数组元素的下标从0开始,依次为0123 n – 1,不能超出范围。

注意:

1)在定义数组时,数组大小必须是整型常量,不能是变量或表达式。下面的代码试图动态定义数组的大小:

int  n;

n = 6;

int a[n];

该段代码将会导致编译出错,因为n是一个变量。

2)在同一个程序中(主程序或用户函数),数组名称不能和其他的用户变量或系统变量的名称相同。例如:

int a;

byte a[8]; 

数组a的名称和变量名相同,编译器认为是变量重复定义。

3)相同类型的数组或变量可以在一个语句中定义。例如:

 int a[10],b[20];     //同时定义两个整型变量ab

 float x,y[10];       //同时定义float型变量xfloat型数组y

这一点与一条语句定义多个变量类型。

Ø  数组元素的使用

   在对数组进行操作时,只能对数组中的元素进行引用,不能把整个数组作为一个整体使用。数组元素的引用格式为:

     < 数组名 >  [ < 下标 > ]

     其中,下标可以是整型常量或整型变量或byte型变量。M语言规定,下标的最小值是0,对应数组的第一个元素;最大值为数组的大小(即元素个数)减1,对应数组的最后一个元素。例如:

double  d[10];

d[0]表示该数组的第一个元素,d[1]表示第二个元素,d[9]表示最后一个元素。d[0]d[1]d[2]d[9]都是double型的变量。

引用数组元素时,数据元素本身相当于一个变量,因此,对该数组元素的操作类似于变量的操作。例如,下面的代码可以交换数组元素d[0]d[1]的值:

double  d[10],t;

t = d[0];

d[0] = d[1];

d[1] = t;

注意: 处于对程序效率的考虑,M语言编译器不对数组下标界进行检查。在访问数组元素时,如果下标表达式的值超出了数组元素个数范围,即下标小于0或大于元素个数-1。会发生不可预测的结果,所以,在设计程序时,要保证对数组元素的访问不要越界。

u  位变量

 我们知道,8位构成一个字节,两个字节构成一个字。无论在什么情况下,数据总是用01的组合起来存储的。当需要获取变量(int型、byte型变量)的某一位的值或者给变量的某一位赋值时,为了操作方便,程序语言中加入了位变量。

    格式为:< 变量名称 >  < . >  < 位数>

    例如:a.0  a.8  //a是一个int型变量

取位操作通过一个操作符“.”实现,只有byte型和int型的变量才能有取位操作。例如:

int a;

a = 30;

a.0 = 8; //取变量a的第一位,把它的值变成1,位的值只能是01,非01

a.7 = 1; //取变量a的第八为,把它的值变成1

    通过上面的程序,对照上面内存表格,我们可以发现,内存中的位通过位操作后,内存的数据发生了改变,a的值由30变成了159