- C语言编程从零开始学(视频教学版)
- 王英英 李小威编著
- 3490字
- 2024-12-21 01:30:44
4.5 变量
其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。变量名确定了它所代表的内存大小和类型,变量值是指它所代表的内存块中的数据。
4.5.1 变量的定义
对变量进行定义就是告诉编译器在哪里创建变量的存储,以及如何去创建这个变量的存储。
定义变量首先要指定这个变量的数据类型,然后在变量类型后跟着此类型所包含的若干变量的列表,故定义变量的语法如下:
类型说明符 变量名,变量名,...;
例如:
type variable_list;
其中,type必须是一个有效的C语言数据类型,如char、int、float、double、bool或者是任何用户自定义的对象;而variable_list可以由一个或多个标识符名称组成,多个标识符之间使用逗号进行分隔。
例如,定义int型变量x、y、z;char型变量a、c;double型变量b、g。代码如下:
int x,y,z; char a,c; double b,g;
注意:
(1)允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。
(2)最后一个变量名之后必须以“;”号结尾。
(3)变量定义必须放在变量使用之前。一般放在函数体的开头部分。
4.5.2 变量的声明
变量的声明是向程序表明变量的类型和名字,声明变量之后,就可以把它们用作存储单元来存储声明时指定的数据类型数据。定义包括声明:当定义变量时声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型前的关键字extern。
声明变量的语法如下:
extern 数据类型 变量名[=值]
例如,声明一个int型变量sum,double型变量area,语法如下:
extern int sum; extern double area;
提示
变量在命名时应该遵守标识符的命名规则,同时变量命名要区分大小写,例如“Area”与“area”为两个不同的变量。
【例4-10】编写程序,演示对变量进行声明。(源代码\ch04\4-10)
运行上述程序,结果如图4-24所示。
图4-24 变量的声明
【代码解析】
本例用于演示变量的声明。首先在main函数外对变量进行声明的操作,然后对变量a和b进行定义以及初始化,通过表达式计算a与b的和,然后再将计算结果赋值给sum,最后通过printf函数将a、b的值以及sum输出。
提示
在使用变量之前必须对变量进行声明,否则就会造成编译错误。
4.5.3 变量的初始化与赋值
变量可以先定义再赋值,也可以在定义的同时进行赋值;在定义变量的同时赋初值称为初始化。
在变量定义中赋初值的一般形式为:
数据类型 变量1=值1,变量2=值2,…;
例如:
int a=3; int b,c=5; float x=3.2,y=3.0,z=0.75; char ch1='K',ch2='P';
提示
在初始化的过程中不允许连续赋值的操作,例如“int a=b=c=1”是不合法的。
赋值语句通常由赋值表达式和分号“;”构成。它的表现形式一般为:
变量=值;
例如,将“2”赋值给变量“a”,语法格式如下:
a=2;
与变量的初始化不同的是赋值符“=”右边也可以是另一个赋值语句,也就是:
变量=(变量=值);
相当于:
变量=变量=…=值;
例如,将“2”赋值给变量a,b,c。语法格式如下:
a=b=c=2;
它等同于:
c=2; b=c; a=b;
4.5.4 变量的分类
在C语言中,变量类型一般分为整型变量、实型变量以及字符型变量。
1.整型变量
整型变量用于存储整型数值,它又分为有符号基本整型、无符号基本整型、有符号短整型、无符号短整型、有符号长整型以及无符号长整型。
(1)有符号基本整型
有符号基本整型的关键字为“signed int”。通常编写代码时可将“signed”省略,也就是平常说的整型“int”,它在内存中占4个字节,取值范围为-2147483648~2147483647。有符号基本整型变量的定义语法如下:
(signed) int 变量名;
例如,定义一个有符号基本整型变量a,初始化为5,语法如下:
int a=5;
(2)无符号基本整型
无符号基本整型的关键字为“unsigned int”。通常编写代码时可将“int”省略,它占有4个字节内存,取值范围为0~4294967295。无符号基本整型变量的定义语法如下:
unsigned (int) 变量名;
例如,定义一个无符号基本整型变量b,初始化为2,语法如下:
unsigned b=2;
(3)有符号短整型
有符号短整型的关键字为“signed short int”。通常编写代码时可将“signed”以及“int”省略,它占有2个字节内存,取值范围为-32768~32767。有符号短整型变量的定义语法如下:
(signed) short (int) 变量名;
例如,定义一个有符号短整型变量c,初始化为3,语法如下:
short c=3;
(4)无符号短整型
无符号短整型的关键字为“unsigned short int”。通常编写代码时可将“int”省略,它占有2个字节内存,取值范围为0~65535。无符号短整型变量的定义语法如下:
unsigned short (int) 变量名;
例如,定义一个无符号短整型变量d,初始化为4,语法如下:
unsigned short d=4;
(5)有符号长整型
有符号长整型的关键字为“long int”。通常编写代码时可将“int”省略,它占有4个字节内存,取值范围为-2147483648~2147483647。有符号长整型变量的定义语法如下:
long (int) 变量名;
例如,定义一个有符号长整型变量e,初始化为5,语法如下:
long e=5;
(6)无符号长整型
无符号长整型的关键字为“unsigned long int”。通常编写代码时可将“int”省略,它占有4个字节内存,取值范围为0~4294967295。无符号长整型变量的定义语法如下:
unsigned long (int) 变量名;
例如,定义一个无符号长整型变量f,初始化为6,语法如下:
unsigned long f=6;
【例4-11】编写代码,用于演示整型变量6种类型的定义。(源代码\ch04\4-11)
运行上述程序,结果如图4-25所示。
图4-25 整型变量的类型
【代码解析】
本例用于演示整型变量6种类型的定义。使用关键字“int”定义有符号基本整型变量i;使用关键字“unsigned”定义无符号基本整型变量ui;使用关键字“short”定义有符号短整型变量si;使用关键字“unsigned short”定义无符号短整型变量usi;使用关键字“long”定义有符号长整型变量li;使用关键字“unsigned long”定义无符号长整型变量uli。
2.实型变量
实型变量又称为浮点型变量,根据精度可分为单精度类型、双精度类型以及长双精度类型3种。它是由整数部分和小数部分组成的。实型变量用于存储实型数值的变量。
(1)单精度类型
单精度类型使用关键字float表示,它占有4个字节内存,取值范围为-3.4*10-38~3.4*1038。单精度类型变量的定义语法如下:
float 变量名;
例如,定义一个单精度类型变量x,初始化为6.18,语法如下:
float x=6.18f;
(2)双精度类型
双精度类型使用关键字double表示,它占有8个字节内存,取值范围为-1.7*10-308~1.7*10308。双精度类型变量的定义语法如下:
double 变量名;
例如,定义一个双精度类型变量b,初始化为1.234,语法如下:
double y=1.234;
(3)长双精度类型
长双精度类型使用关键字long double表示,它占有8个字节内存,取值范围为-1.7*10-308~1.7*10308。长双精度类型变量的定义语法如下:
long double 变量名;
例如,定义一个长双精度类型变量c,初始化为5.126,语法如下:
long double z=5.126;
【例4-12】编写程序,用于演示实型变量不同类型变量的定义。(源代码\ch04\4-12)
运行上述程序,结果如图4-26所示。
图4-26 实型变量
【代码解析】
本例用于演示实型变量3种类型的变量定义语法。使用关键字“float”定义单精度类型变量f;使用关键字“double”定义双精度类型变量d;使用关键字“long double”定义长双精度类型变量ld。在输出的时候注意与整型类型不同的是使用“%f”,“f”表示输出类型为浮点型数据。
3.字符型变量
字符变量的类型说明符是char。每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的,取值范围为-128~127。
字符变量类型定义的格式和书写规则都与整型变量相同,语法形式如下:
char 变量名;
例如:
char a,b;
字符变量在内存中的存储形式及使用方法,如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a、b赋予'x'和'y'值:
char a='x'; char b='y';
实际上是在a、b两个单元内存放120和121的二进制代码,如图4-27所示。
图4-27 实型变量
所以也可以把它们看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。
【例4-13】编写程序,定义两个字符型变量a与b,并分别进行初始化,最后输出它们的整型数据。(源代码\ch04\4-13)
#include<stdio.h> int main() { char a,b; // 定义字符型变量 a=120; b=121; printf("字符变量为:%c,%c\n",a,b); printf("ASCII码值为:%d,%d\n",a,b); return 0; }
运行上述程序,结果如图4-28所示。
图4-28 字符型变量
【代码解析】
本例用于演示字符型变量在内存中的存储方式。首先在代码中定义a、b为字符型变量,但在赋值语句中赋以整型值。从结果发现,a、b值的输出形式取决于printf函数格式串中的格式符,当格式符为“c”时,对应输出的变量值为字符,当格式符为“d”时,对应输出的变量值为整数。
【例4-14】编写程序,定义两个字符型变量a与b,并分别进行初始化,最后输出它们的整型数据。(源代码\ch04\4-14)
#include<stdio.h> int main() { char a,b; a='a'; b='b'; a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b); return 0; }
运行上述程序,结果如图4-29所示。
图4-29 字符型变量
【代码解析】
本例用于演示字符型变量是如何参与数值运算的。首先在代码中定义a,b为字符型变量,然后分别进行赋以字符值‘a’和‘b’。最后用字符的ASCII码参与运算。由于大小写字母的ASCII码相差32,因此运算后把小写字母换成大写字母。然后分别以整型和字符型输出。通过这段代码可以发现字符型变量在内存中是将字符的ASCII码值存储到内存单元中的,它们之间能够相互转换。