前面我们讲过,C语言是结构化的程序设计语言,把问题归结为两部分:数据和对数据的操作。今天要讲的变量,就是C语言中数据的重要部分。
C语言是一个强类型的语言,它要求所有的变量,都必须先定义,后使用。
C语言的变量定义最基本的形式是:
类型名 变量名 ;
注意:变量名后面的封号不能省略。
因为没有查阅C语言规范,按我个人理解:
1. 由字母、下划线或者数字构成,且首字符只能是字母或者下划线;
2. 变量名几乎没有长度限制;
3. 大小写敏感。
字符型(char)
在大多数的编译器里,char 类型的变量,存放一个8位二进制整数,转化为十进制时,采用补码的规则映射,范围是 -128~127
比如下面这段代码,就在main函数里,定义了一个char 类型的变量 cZiFuXing:
int main(void)
{
char cZiFuXing ;
}
其中 char 就是类型名称;cZiFuXing是变量名。变量定义了以后,就可以给变量赋值,比如:
int main(void)
{
char cZiFuXing ;
cZiFuXing = 100 ;
}
赋值之后,还可以把他打印出来:
int main(void)
{
char cZiFuXing ;
cZiFuXing = 100 ;
printf("%d\r\n", cZiFuXing);
}
上面代码的运行结果如下:
关于上面这段代码有几点需要说明:
1. “=”是C语言里面的一个运算符,应该读作“赋值”,即:cZiFuXing = 100 ; 的功能是给变量 cZiFuXing 赋值为100,而不是cZiFuXing 等于100 。“等于”在C语言里,用两个等号“==”来表示。
2. 解锁了printf函数的新用法,printf("%d\r\n", cZiFuXing); 其中%d 的涵义是,以10进制整数的形式,打印 cBianHao 的值。
3. 变量名 cZiFuXing ,是一种变量命名的方式,c 表示变量类型是char;ZiFuXing是汉语“字符型”的汉语拼音。
4. 本节char类型的范围是 -128~127,如果给cBianHao 赋值一个超范围的数比如129,cZiFuXing的实际值是 -128~127范围内与129 模256同余的数,就拿129举例,
当 时
因而下面的代码:
int main(void)
{
char cZiFuXing ;
cZiFuXing = 129 ;
printf("%d\r\n", cZiFuXing);
}
运行结果是:
短整型(short int)
在大多数的编译器里,short int 类型的变量,存放一个16位二进制整数,转化为十进制时,采用补码的规则映射,范围是:-32768 ~ 32767 。
下面这段代码,就是定义了一个短整型的整数,然后赋值100,并且打印:
int main(void)
{
short int sDuanZhengXing ;
sDuanZhengXing = 100 ;
printf("%d\r\n", sDuanZhengXing);
}
运行结果嘛,就如下图:
短整型跟字符型比,就是长度大了一倍,因此所能表示的十进制整数,从增大到了,因此如果你给一个短整型赋值40000,因为不在-32768 ~ 32767范围内,当你以以10进制打印时,实际打印的是40000 在 -32768 ~ 32767 范围内模65536的同余数。
当 时
所以下面这段代码:
int main(void)
{
short int sDuanZhengXing ;
sDuanZhengXing = 40000 ;
printf("%d\r\n", sDuanZhengXing);
}
运行结果为:
整形(int)
int 型的长度,比较复杂,因为C标准并没有规定int的长度,只是规定:short int 类型不能比 int 类型长,所以,编译器在实现int的时候就有点放飞自我了,有的编译器(比如我上学时用的 TubroC和 keil 51)中就是16位二进制数;有的编译器(比如 gcc)中就是32位二进制数。当然不论16位还是32位,转化为十进制时,采用补码的规则映射。32位二进制数,映射为十进制数的范围比较大,不需要记住,因此这里就不写了。如果感兴趣,可以自行百度。
不论 int型16位还是32位,因为它长度合适且范围够大,因此是编程时,最常用的整数数据类型。
下面这段代码:
int main(void)
{
int iZhengXing ;
iZhengXing = 40000 ;
printf("%d\r\n", iZhengXing);
}
当int 型为32位时,运行结果如下:
长整型(long int)
C标准规定,long int类型不能比int类型短,在大多数的编译器里,long int 类型的变量,存放一个32位二进制整数,转化为十进制时,采用补码的规则映射 。
下面这段代码:
int main(void)
{
long int lChangZhengXing ;
lChangZhengXing = 40000 ;
printf("%d\r\n", lChangZhengXing);
}
运行结果为:
超长整形(long long int)
在大多数的编译器里,long long int 类型的变量,存放一个64位二进制整数,转化为十进制时,采用补码的规则映射 。
下面这段代码:
int main(void)
{
long long int llChaoChangZhengXing ;
llChaoChangZhengXing = 40000 ;
printf("%d\r\n", llChaoChangZhengXing);
}
运行结果为:
关于变量名
如果按照C语言的规范,变量名是可以随便起的,但在实际应用时,还是要做到见名知意。比如您定义某个 int 型变量,是要存学号,应该命名:iXueHao 。这样不仅仅是为了别人能看懂,也是为了自己能看懂。具体是用英文单词还是汉语拼音,这个要看个人的英语水平,英语达到母语水平,就用英文单词,汉语达到母语水平,就用汉语拼音。