c语言当中的数组的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 01:38:01
在C语言当中,用int a[n]来定义一个数组,但是非要规定起始元素是a[0]。这就给后面的操作带来了麻烦,在进行有些操作时,不是要加一就是要减去一,而如果规定了起始元素是a[1],就减去了不必要的麻烦。那么,在c语言当中,是出于什么养的考虑,而要将其中的第一个元素规定为a[0]呢?

int a[N];
a[0]相当于*(a+0)
a[1]相当于*(a+1)
......
a[N-1]相当于*(a+N-1)

a[N]数组越界
定义int a[N];编译器连续分配sizeof(int)*N的堆栈空间, 数组名a 为这个连续空间的首地址,假设首地址为x 那么
a+0的地址为 x+sizeof(int)*0
a+1的地址为 x+sizeof(int)*1
a+2的地址为 x+sizeof(int)*2
a+3的地址为 x+sizeof(int)*3

规定,就像1+1=2

这个不是什么考虑,规定就是规定。
你说的不方便只是你没有习惯。你操作的下标定义时从0开始嘛

大家心目中的第一个元素,从思维定势上来说就是1
可以换一下思维方式,第一个从0开始。你慢慢就习惯了

这个我估计和字节有关系。
1个字节有8位,最早定义的时候就把他定义成了0~~7位。
估计给数组定义的时候,数组的下标在内存里是以字节方式存储的。
所以首地址是 0。我这么说布知道你能不能理解

问的什么弱智问题。那人为什么叫“人”,不叫“猪”呢?规定就规定。你要去适应这些诶语言的风格。是你自己不习惯或者不能掌握,不能说麻烦。