C语言编程从零开始学(视频教学版)
上QQ阅读APP看书,第一时间看更新

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码值存储到内存单元中的,它们之间能够相互转换。