大话编程(三)
2013年1月15日 20:33:36
前边将了点线面中的数据结构,没有讲'体',这次就说说'体'
根据上边的几幅图,我举的例子都是以8个bit为单位:
1*8bit用作表示字符型;4*8bit用作表示整形
n个1*8bitn用作表示字符型数组;n个4*8bit用作表示整形数组
.......
那如果我想把整形数组,字符型数组放在一起呢,这个整体表示什么?--这就是体,c语言中这种不同长度的类型组成的一堆东西叫做结构体(struct)
至于对应与几何中怎样记忆,就自己想吧,贴图
把一堆不同长度的东西放到一起组成的数据类型叫结构体,
那么把同样的一堆东西再'复制'一份再放一堆,再放一堆,再放一堆,那么,这几堆东西合起来就叫做,结构体数组了
再复习一边:字符-字符数组,整数-整数数组,浮点数-浮点数数组,结构体-结构体数组.......
55AA55AA55AA55AA55AA55AA55AA55AA55AA55AA55AA55AA55AA
另外:为什么是8
先说一句教科书上的话:内存,是以字节编址的.
意思是说,内存是有地址的,每个字节有一个地址(嗯?还是有点儿不懂?)
之前说过,根据半导体的材料和电路的不同连线方式,
贵一点儿的弄几个,横七竖八的和一个只会计算2以内加法的东西堆在一起,盖上盖子就组成了cpu
便宜一点儿的排列整齐堆在一起,就组成了内存条
再便宜点儿的堆一大堆,放到一起就组成了硬盘
数据的流向是,硬盘->内存->cpu
cpu每次都要从内存中按读取数据,然后处理,如果不存在,就告诉硬盘让它把数据给内存,然后再从内存读数据
要保证cpu从内存中读取需要的数据,cpu就得知道需要的数据在内存的哪个地方,
这就需要给内存不同的地方写一个编号,根据编号来找cpu所需的数据,于是就规定,每8个bit给一个编号,这样就可以根据编号来找所需的数据了
而这8个bit就是一个字节,所以说:内存是以字节编址的
1.这个编号(内存地址)在编写程序时也可以获得
2.根据以上贴的几幅图,数组都是连续的(排列整齐的)放在一起的bit;结构体可以放不同长度(不同数据类型)的东西
由1,2可知:
我可以定义一个结构体,即存放本身的数据,又存放上一个结构体的内存地址,这样就多个结构体就可以不用连续的存放在内存中了,这就叫"链表"
同样如果结构体中及存放他前一个结构体的地址,又存放下一个结构体的地址,那么这种链表就叫双向链表
注:以上的'地址'指的是开始地址,因为一个数据类型不可能只占用8bit,如果占用了超过8bit就拥有了多个内存地址,一般只用保存最开始的那个个地址就行了