牛骨文教育服务平台(让学习变的简单)
博文笔记

对C语言数据类型和变量的理解

创建时间:2015-01-16 投稿人: 浏览次数:708

       很多C语言的教程都把数据类型定义为 “数据和在数据上能进行的操作(运算)的集合”,意思是说对于一个数据类型(如int a),当用该类型定义了一个变量以后,数据所能表示的大小、所占的存储空间和能进行的运算操作都是固定的。而变量则是这种数据类型的实例,是这种数据类型特性表现的载体。

       个人认为上面这些定义其实是站在人的角度给出的。可是编程语言到可执行的机器码之间的转化是由编译器来完成的,也就是说学习编程语言不能只是站在人的角度看问题,站在编译器的角度,明白编译器在处理编程语言的过程做了哪些事儿是很关键的(可惜我目前还没接触编译原理这门课)。如果是站在编译器的角度看待数据类型是怎样的呢?下面的论述可能不太正确,但是在还没学过编译原理的情况下,暂时这样理解吧。

       我们知道存储空间的地址是线性的,比如32位地址总线的机器,它的地址范围就是0x00000000~0xFFFFFFFF,如此大的一片区域,虽然每个字节都有自己的专属地址,但是记住地址可真不是个好办法。现在要存放一个100.45的数据,该怎么做?首先可能要做的第一件事就是确定这个数据到底应该占用多大的存储空间,也就是划定一块足够大的空间存放这个数据;其次应该用哪块空间存储它?如果仅仅是存放这个数据,做这两件事还比较简单,但是如果数据非常多,大小还不一样,那该怎么办?难道要一个一个的划空间然后找地址?如果没有数据类型这种概念,我想这是最好的方法了。

        其实数据类型是可以这样理解的:任何一种数据类型都是一个“划定存储空间大小的模子”  也就是说一旦拿到了一种数据类型,实际上就是拿到了一个“模子”,这个模子可以划定一块大小确定的存储空间,并且这个模子划出来的空间存储的数据所能进行的操作是固定不变的。

上面给出了数据类型的一种理解,那么用这种数据类型定义的变量的本质是什么呢?理解了上面数据类型的概念,相信很容易就能猜到,变量的本质其实就是:“给划定好的空间取一个简单易记的名字”   也就是说变量其实就是一个存储空间地址的别名(但是要区分变量作为右值时代表了空间里的数据)以后要操作这个划定好的存储空间就可以用这个名字(比如要写入或读出数据,就可以用这个名字)。C语言中丰富的数据类型和变量其实就提供了各种“尺寸”的模子,程序员要做的就是选择合适的模子,划定大小适合的存储空间并且把这个空间用一个简单易记的名字重命名。

       上面是个人对于数据类型和变量的理解,可能尚且不够严谨和准确,但是也能在一定程度上反映了数据类型和变量的本质。

        由于本人水平有限,如果哪位大侠觉得不对,欢迎指正批评!

        第一次写博客,有点小激动啊!微笑

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。