计算机现在功能虽然强大,但究其实质是0与1的变换,循环往复,以至无穷,故能成其大。正如老子所说“一生二,二生三,三生万物”、“世界万物生于有,有生于无”。所以在学习计算机课程的过程中,要劳劳掌握基础知识,掌握根本,然后再去求变,才能以不变应万变,方为上策。
内存与地址
在介绍指针之前,先让我来讲一讲计算机内存与地址。计算机内存可以看作是一辆火车,我们知道火车有很多节车厢,每一节车厢都有车厢编号(坐过火车的人都知道),每一节车厢就可比喻为计算机的一块内存,车厢里面有座位号,通过座位号就可以唯一的确定一个座位,座位号就好在这一个内存块的偏移量,通过它可以唯一确定的数据存储的位置。
注意,内存中的每个位置由一个独一无二的地址标识,内存中的每个位置都包含一个值。
现在举例说明内存中数据存储,如下表,表中加粗边框部分表示内存中实际存储的数据,无边框部分表示内存单元的地址。
10000 | 10004 | 10006 | 10008 | 10012 | 10016 |
110 | -1 | 16 | 1234567890 | 10000 | 10008 |
仔细的人也许会看到,对-1或16只占了两个字节,可粗略看作为short int类型数据, 110在内存中占了4个字节,可粗略看作是int类型,而1234567890则可粗略看作是浮点型数据,所以应该了解虽然是同样一块地址,也可能存放不同类型的数据。
如果你能记住一个值的存储地址,你就可能根据这个地址取得这个值。但是要记住所有这些地址实在是太笨拙了(因为内存的地址并不像上表中表示的那么简单),所以高级语言所提供的特性之一就是通过名字而不是地址来访问内存的位置。下面这张表与上表相同,但这次使用名字来代替地址。
a | b | c | d | e | f |
110 | -1 | 16 | 1234567 | 10000 | 10008 |
例1:
例2
int e = 10000;
例2中e则代表一个值。