瑞问:“还没说int呢。”
int就是整数的意思,我们重点关心int在计算机中的大小范围,它是能够存储-2147483648到2147483647的数字,看上去这是一个非常大的范围,所以在不严格要求内存管理的情况下,int很常用。
瑞说:“这个范围已经不小了,大部分情况下应该是够用的了。”
但是我给的这个范围并不一定真的对,我一直强调,C语言是真正高手才会使用的编程语言。你需要根据情况进行更精确的设置,有的计算机是64位的,有的是32位的,之前还有16位的,这指的是计算机一次能处理的最基本的数据长度。
瑞说:“所以在不同的计算机上,64位的数字范围和32位不同。”
int定义的是多少个这样最基本的数据长度,换句话说,在不同位数的计算机上,int的范围是有差别的。
瑞问:“变量a中能装小数吗?”
不能,int不仅定义了这个变量的大小范围,还定义了存储规则。int意味着只能存储整数。在计算机里存储小数是非常复杂的事情,因为内存设计的时候没有设计如何存储小数点,所以使用小数需要一个复杂的转变过程。为了让计算机知道这个数字需要按照小数规则进行存储,C语言提供了另外一个数据类型。
瑞问:“现在我好奇,用‘int a;’声明了变量a,我没有存任何数据在其中,那a里面有什么?”
探索: 可以用程序试一下,声明变量后立刻显示其中的值。
瑞说:“我这里显示的结果是0。”
你得到的结果是0,这和预想的一样,声明了个变量,什么都没存,那么a中默认存储的是0,也有人得到的结果不是0。
思考: 计算机的内存是用不同的电压来表示数据的。在你的程序运行之前,如果内存里已经有其他程序遗留下来的数据,那么,这些数据对于你的程序,是没有用的,要将它们对应的电压变成零。而这是需要计算机付出时间的。现在如果程序员声明了一个变量,并且没有告诉C语言这个变量里应该存储什么数。一旦C语言自作主张,把它变成0,就浪费了时间,而早年的C语言发明者不希望浪费一点点时间。
瑞说:“因为那个时候计算机运行得慢,程序员不舍得浪费时间。”
所以C语言的规则是,经过声明而没有装入任何数据的变量的数到底是什么,是不确定的。虽然这个规则合情合理,但是有很多学艺不精的程序员写程序时就“栽”在这件事情上。因为声明了变量后,在没有给它赋值的情况下,使用a里的数,给程序带来意想不到的结果。为了防止编程菜鸟犯这样的错误,同时也是因为现在的计算机运行的速度已经很快了,所消耗的运行时间,早就没那么重要,因此,有一些编译器,会默认为未赋值的变量赋初值为0。然而好的程序员会确保自己控制变量的数值,不会声明变量后不赋值就使用变量里的值,即便他知道默认初值是0。
瑞说:“明白了,我还是不要相信里面默认的数字吧。”