顺序表的实现中为什么保存的是具体的数据元素地址?而保存的地址存放在unsigned int 中,而

顺序表的实现中为什么保存的是具体的数据元素地址?而保存的地址存放在unsignedint中,而不是具体的指针类型中?为什么不是void*呢?... 顺序表的实现中为什么保存的是具体的数据元素地址?而保存的地址存放在unsigned int 中,而不是具体的指针类型中?为什么不是 void*呢? 展开
 我来答
cdyzxy
2016-02-02 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3761万
展开全部
所谓顺序表,就是地址连续的一块内存,程序需要记录这块内存的起始地址,用这个起始地址来在表中存取数据;还要记录的是这块内存中分几个“格”,每个“格”就是数据类型,比如这个数据区的每个单元是unsigned int型的,那么每个单元占4个字节,如果是字符型的,每个单元占1个字节;最后要记录一共有多少个单元。
具体程序存取数据是根据起始地址加上偏移来寻找相应的单元。
比如c语音的数组,需要写明数组名,这个数组名在程序看来就是那个起始地址,然后需要写明数组大小,也就是单元个数,数组还要写明是什么类型的,这就是告诉编译系统,这个数组每个单元的尺寸。
更多追问追答
追问
那为什么保存的地址存放在unsigned int 中,而不是具体的指针类型中,比如 void*呢?
追答
一般来说地址也是个数据,与cpu地址总线宽度相同,这个单元存放的数据是unsigned int型的,可以被当成地址来用;比如:unsigned int a[5],*p; p=a;这里指针p是个变量,类型是指针类型,即unsigned int *类型,编译程序需要你声明指针指向数据的类型,就是这个,具体变量p是一个存放地址的数据单元,而a不是变量(变量是a[0]~a[4]),只是一个标号。
就数组来说,unsigned int a[5];这样的定义,在程序编译时,编译系统会将符号a映射成一个具体的地址数据,这个数据不是变量只是用来程序其他位置引用时的计算,而开设的数组的每个单元是a[0]、a[1]、...、a[4],存放的是具体的数据,这些数据与起始地址不是一回事。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式