存储单元为什么从0开始编址?c语言数组下标为什么要从0开始?

如题所述

以数组为例,数组是使用连续的存储空间存储数据。
int a[4] = {1,2,3,4,5};
数组名a代表的就是这个存储空间的首地址。
1存储的位置就是存储空间的首地址。
而2存储的位置就是首地址加上1个int型所需空间的地址。
以此类推
所以a[n]元素的地址,实际上就是a的地址,加上n个元素的所占空间大小
a[n]地址 = a地址 + sizeof(int) * n;

综上所述,数组的下表可以理解为距离首地址的偏移量。
所以第一个元素距离首地址的偏移量为0;因为第一个元素的地址,就是首地址。追问

这些我都知道,我主要是想问存储单元为什么从0开始编址tangram_guid_1359297107122?为什么不从1啊啥的开始?

追答

啥意思?存储单元的编址?为什么从1开始,0开头的部分不用了?
就跟数数一样的,一般存储单元8字节编址的话,也就从0x00000001到0xffffffff啊。为什么要从0x10000000开始?前面的不用了?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-28
计算机中采用二进制,不考虑符号的情况下最小数是"0x0000",所以在计算机中起始位置都是从0开始的

帮忙写一个算法,用c语言
数值下标是从0开始的,array[0...5,0...7](1)数组A的体积=6(行)×8(列)×6(字节)=288(字节)(2)数组A的最后一个元素a57的第一个字节的地址:LOC(5,7)=LOC(0,0)+ ( 5×8+7 )×6 = 1000 (基地址)+ 282 = 1282 (3)按行存储时,元素a14的第一个字节的地址:LOC...

C语言a[2]=6赋值正确吗
C语言a[2]=6赋值不正确。a[1][0]=6。二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可...

什么叫存储单元啊
一个存储单元由若干个记亿单元组成,它可以存放一个存储字或若干字节。任何一个存储器都是由极多的存储单元所组成。而存储器的结构又决定了基本存储单元所必须具有的引线或端点的数量。为了区别存储器中的存储单元,存储单元还需要编址,即给每个存储单元一个唯一的标志。

c语言中二维数组哪个是行,哪个是列
4、二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完...

C语言指针的地址范围是多少?
C语言的指针地址范围是4字节空间,即从地址0x00000000~地址0xFFFFFFFF。但其中有些字段是系统保护的或所使用的硬件平台根本就不存在,所以用户指针并不能完全使用这个空间。不过用户不必担心,只要按规范使用指针,系统都会自动正确安排。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种...

想问一下大家,为什么32位CPU的寻址能力为4GB,而不是4Gb呢?
为什么计算机最基本的存储单元是字节而不是位?因为位没有编址,所以不能直接寻址,关于字节编址等会介绍)。计算机的内存(memory)就是有许许多多个字节组成的,如果我们将每一个字节看成一个小方块,那么内存就是由许许多多个这样的小方块构成的。———《C语言基础》...

MCS-51单片机其内存由哪几部分组成?其编址和访问的规律是怎样的?
程序存储器以程序计数器PC作为地址指针,通过16位地址总线,可寻址的地址空间为64K,片内、片外统一编址。在程序存储器中有些特殊的单元在使用时应加以注意。其中一组特殊的单元是0000H~0002H单元,在系统复位之后,PC为0000H,单片机从0000H开始执行程序,该单元是系统执行陈故乡的起始地址,通常在该...

数组的分类
二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完...

内存按字节编址,地址从A4000H到CBFFFH,共有()字节
内存按字节编址,地址从A4000H到CBFFFH,共有163840个字节。CBFFFH-A4000H+1=28000H=160K。十六进制CBFFF-A4000为:(C-A=2),(B-4=7),(F-0=F),(F-0=F),(F-0=F)。最后得:27FFF。十六进制27FFFH+1H=28000H。十六进制28000H转为二进制为2*16*16*16*16+8*16*16*16+0...

我想用C语言对单片机的RAM区清0,有人能告诉我个思路吗?
你那么想就不可能了 因为你要执行的指令也是在RAM里的 自己把自己清掉了 难道还能继续下去么……

相似回答
大家正在搜