在程序运行过程中其值可以改变的量称为变量。所有变量在使用前必须先定义。定义变量的同时可以赋初值。
变量赋值语句的格式如下:
变量名=表达式; //常量是表达式的特殊情况
例如:
int a=0, b=5+4; //定义整形变量a和b的同时给其赋初值
变量定义,一般放在函数体的开头部分。
1.变量的数据类型、值和地址
变量的数据类型决定了变量编码格式和行为。变量的值是在程序运行中动态变化的,但变量的地址,在其生命周期内却是不变的。除了可以通过变量名获取或修改变量的值外,也可以由变量的地址“间接获取”。
2.变量名命名规则
变量名是由字母、数字和下划线组成,且首字符不能是数字。变量名、函数名都是需要满足此要求。为方便使用,变量名称最好能见名识义,如变量的类型、用途。
以下变量名是合法的:
length、area_23、_foo、width、high
以下变量名是不合法的:
3.变量的初始化
定义变量后,与变量对应的内存区域的状态是不确定的,也就是说,其中存放的信息是“无效的”。因此,在使用变量前,首先要给其赋值,即初始化变量的值。
在程序中,可以在定义变量的同时对其初始化,或者先定义变量后对其初始化。例如:
说明:
(1)在C语言中,凡是没有被事先定义为变量的标识符,不能作为变量名使用,这就能够保证程序中变量名的正确性。
(2)每一个变量被指定为一个确定类型,在编译时系统能为其分配相应的存储单元。
(3)每一个变量属于一个类型,在编译时系统据此检查该变量所进行的运算是否合法。
2.1.4.运算符和表达式
由常量、变量等组成操作数,操作数和运算符一起,就构成了表达式。表达式是C语句的主体。在学习表达式之前,要先了解每一种运算符的优先级、功能等特性。
1.运算符的优先级和结合性
运算符的优先级和结合性如表2-2所示。
表2-2 运算符的优先级和结合性
根据运算的功能,可分为:算术运算、关系运算、逻辑运算、位运算、赋值运算等。位运算的操作数必须是整数类型,主要用于硬件控制编程。关系运算和逻辑运算构成程序中的判断条件,实现程序的控制转移。算术运算和赋值运算用于操纵数据,保存运算结果。
在表2-2中,要理解运算的优先级和结合性。
(1)理解优先级
从表2-2可看出优先级的大致关系如下:
算术运算 > 关系运算 > 逻辑运算 > 赋值运算
(2)结合性
在表达式中,如果运算符的优先级相同,就要考虑结合性。
表达式:a = b = c = 10;
赋值运算符‘=’为右结合,所以该表达式等价于:
a = (b = (c = 10) );
表达式:a = b + c + 10;
加法运算符‘+’为左结合,所以该表达式等价于:
a = ((b + c) + 10);
2.表达式
一个表达式有一个值及其类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量可以看作是表达式的特例。在实际应用中,就要根据具体情况,写出正确的表达式。(www.xing528.com)
(1)左值
虽然和变量相同的是,表达式也有值和类型。但和变量不同的是,表达式没有“左值”,也就是说,不能被赋值(不能放在赋值运算符的左边)。所以,以下语句存在语法错误:
(a + b )++;
a+b = 1;
(2)表达式的类型
按照优先级和结合性对表达式进行解析时,每个子表达也具有“类型”和“值”信息。同一个运算符,根据操作数的类型不同,结果也会不同。例如,有如下三个表达式:
1/2 // 整数除法的结果为0
1.0/2.0 // 实数除法的结果为0.5
1.0/2 // 系统将精度低的整型转换为精度高的实型,然后做实数除法,结果为0.5
在C语言中,运算符‘/’即可表示整数除法,也用于表达实数的除法。由于数据编码不同,整数的除法和实数的除法,对应于不同的机器指令。因此,前两种表达式写法,两个操作数类型相同,并没什么异议,对第三个表达式,系统自动将精度低的整数2转换为精度高的实数2.0,然后做实数除法。
(3)关系运算和逻辑运算
在C语言中没有设计专门的数据类型用于表示逻辑值“真”和“假”,而是采用整数值1和0来表示。因此,关系运算和逻辑运算的结果都是整数类型,且只能为0或者1。
在第3章中,将进一步的讨论关系运算和逻辑运算。
2.1.5.几个需要注意的运算符
只有了解运算符的特性,才能恰当的应用在程序中,以下运算符初学者应特别留意:
1.自加、自减运算(++、――)前后缀形式的区别
假设有如下定义:
int i, j;
作为一个单独的语句,以下语句的行为是等价的:
i++;
++i;
i = i+1;
i +=1;
作为一个子表达式,++i和i++是有区别的。如:
j = ++i; 表示先将变量i自加1,然后将自加后的值作为子表达式的值,赋值给变量j。等价于++i; j = i;
j = i++; 表示先将变量i的值作为子表达式的值赋值给变量j,然后变量i自加1。等价于j = i; ++i;
以下形式的表达式,不同的编译器解析过程是不同的。因此会产生二义性,应避免在程序中使用这样的语句。
j = i++ + i++;
可以解释为:j = i+i; i++; i++;
也可以解释为:t1 = i; i++; t2 = i; i++; j = t1+ t2;
2.三元运算? :
这是C语言中唯一的三元运算符。例如,以下语句将变量a和b中较大的值赋值到变量max中:
max = a>b ? a : b;
稍加变化,可以计算三个变量中的最大值:
max = a>b ?(a>c? a: c):(b>c? b:c);
3.sizeof( )
它是一个运算符,而不是函数。用于计算某个数据类型所占的存储空间大小(以字节为单位)。操作数可为类型名,也可以为一个表达式。例如:
printf("%d", sizeof(int)); //输出4[1]
printf("%d", sizeof(1/1.0)); //输出8
4.%运算
“取模”运算,要求两个操作数都必须为整数,如5%2的值是1。可用于判断一个数的奇偶性,是否为素数,求两个数的最大公约数,取一个整数的各个数位。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。