计算机是怎么分配数值给数组的?C/C++

如下代码,计算机是怎么分配数值给 a[0],a[1],a[2]的。什么原理?
为什么分配的不是a[5];a[6];a[7]???

#include
//输入一个整数,分离整数的各个数字存入数组。求各元素之和。
int main(void)
{
long x;
int a[10],i,k,s;
i = s = 0;
scnaf("%ld",&x);
while(x! = 0)
{
a[i] = x%10;
x = x/10;
i++;

                }

                    for(k = 0;k<i;k++)
                            {
                            s = s+a[k];

                            }

printf("sum = %d\n",s);
return 0;

}

i最初是0
a[i] = x%10;
每次赋值到i上
然后
i++

所以是123

i是一个变量,他每次的变动就代表着内存地址的变动,而每段内存地址都是有名称的,
数组的内存地址是连续的,他的名称就是a[1],a[2],a[3]这样的。