在C语言里面数组的下标和地址的具体区别是什么?下标可以看成地址吗?

如题所述

数组中的下标代表的是元素在数组中的位置。而地址是数据在存储器中的位置(地址)。
从这点上来看,下标是不能看做地址的。希望能帮助你!追问

那我在问个问题,就不如说*(a+1)是不是等于a[1]呢?指针变量其实就是地址啊。麻烦你告诉吓我它们为什么相等呢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-10
下标不是地址, 是地址偏移量的索引, 相对于数组首地址的偏移量索引.
如果有定义数组arr, 那么arr[2]的地址就是 arr+2追问

哦,是这样的。那我再问下,那个地址是系统随机分配的吗?

追答

数组占用一块连续的内存地址空间, 是系统分配的, 但肯定不是随机分配.

第2个回答  2012-04-10
地址是一个正整数,在DOS系统下,绝不会是0值,这是因为操作系统将内存的的低端用于系统本身,应用程序使用的存储单元自然分配在较高的地址单元。
数组的起始地址表明该数组的元素从该地址开始存放,数组元素的存放格式是连续的,每个元素占用的字节数随其类型而不同。
下标不是地址,但可以看作地址的增量,假如某数组的首地址是addr,那么下标为0的元素的存放地址是addr + 0,下标为n的地址为addr + n * sizeof(data_class),data_class是数组的数据类型,在VC中,sizeof(char) == 1,sizeof(int) == sizeof(long) == 4。追问

哦,我基本上懂了。就是那个地址是不是在编译是自动分配的?你能给我说下地址的具体含义吗?谢谢了

追答

对的,数组和普通变量一样,都是自动分配的,不需要人为干预的。
存储器与一排连续编号的小房间类同,每个房间的编号是唯一的,不可重复,但可能有间隔。物品放在那个房间,存放后,要进行详尽登记,这个登记册就是查询与使用的依据。

本回答被提问者采纳
相似回答