变量
笔者是一名正在步入嵌入式Linux的程序猿。在巩固C语言之余,笔者认为有必要将其整理成一系列的文章。遐思片刻,为本系列文章取名《不一样的C语言》。不一样的C并不是说笔者所整理的C非STDC(标准C),而是笔者抛开C语言书籍,根据自己的认识所写的C语言系列文章。也许入C未深的我,对于一些概念有错误的理解,望网名能够多多包涵和指正。话不多说,下面马上开篇!
有一个公式:数据结构 + 算法 = 程序。对于面向过程的C语言来说,显然这是正确的。实现色彩斑斓的程序的画笔,正是它--变量。
一、变量是什么
顾名思义,变量就是在程序执行过程中可以根据需要变化的量。一说到变量,大多数C语言初学者脑子里浮现的是int,char,float...你们的反射也并没有什么不妥,因为你们把变量和类型深深的绑定到了一起。而笔者脑子里浮现的是一段抽象化的存储空间。我们先从变量的定义谈起。
定义一个变量的格式:类型 变量名
从语法我们知道,定义一个 变量,我们首先要知道变量是什么类型,然后为这个变量其一个合适的名字。不知道你们会不会感觉奇怪,为什么我们要写类型,至少笔者是敏感的。
在说出笔者的敏感之前,我们先来了解一下强类型语言和弱类型语言。C语言是强类型语言(当然C++/JAVA都是),PHP、JavaScript等绝大部分脚本语言是弱类型语言。那么强和弱的区别在哪里?区别之一就是:强类型语言在定义变量的时候需要指出变量的具体类型,而弱类型语言则显得简单了,PHP直接 $变量名,JavaScript直接 var 变量名。笔者敏感的正是类型,在定义一个变量的时候,我们指明了变量的类型,也正是因为如此编译器知道了如何去给我们在存储空间中申请符合我们类型大小的空间,然后把他的操作入口给变量名。打个比方,变量名就是一把钥匙,而他真正打开的是一所符合我们家庭大小的房子(当然你可以通过手段越界)。
我们再回过头来思量变量,这时的你也许就不会出现int,char,float...出现的是一段存储空间,然后根据变量的类型来确定我们需要如何解释这段空间。到此,笔者重新给变量一个定义:变量是一段用特殊方法解释的可用供程序员修改的存储空间。
二、从unsigned类型修饰符谈变量:
31~24 | 23~16 | 15~8 | 7~0 |
三、从变量的类型转换谈变量:
char c = 'a';
int i = c;
打印 i 的值,则为97,这是安全的转换,因为int的内存空间足够装下char。下面我们反过来:
int i = 255;
unsigned char c = (char)i;
按照int的类型来打印c,结果是255,这看起来并没有什么不妥,但是这是不安全的,如果是256此时就会溢出了。