在这儿我们可以看到subscrip1并不关系到数组的内情向量,而仅关系到该数组分配存储时的空间尺寸。在C语言程序中可以如下定义一个数组:
  type array[][subscrip2]…[subscripn]
  对于C语言中一个一般形式定义的数组:
  type array[s1][s2]…[sn]
  是具有下标界为s1,s2,…sn的一个n维数组,s1,s2,…,sn作为n个内情向量可用来计算程序中出现的引用该数组的元素地址及有关的指针值?
  array 指针值addr 目标长l1
  array[0] 指针值addr 目标长l2
  array[0][0] 指针值addr 目标长l3
  …
   指针值addr
.
目标长ln
.
  其中: addr是数组分配的地址
  lk=sk * sk+1 * … * sn* sizeof(type) k=1,2,…,n
  而array[0][0]…[0] 是该数组的第1个元素。
  有关指针值的计算是:
  array[i1]=array[0]+i1
  array[i1][i2]=array[0][0]+(i1*s2+i2)
  array[i1][i2][i3]=array[0][0][0]+((i1*s2+i2)*s3+i3)
  …
  array[i1][i2]…[ik]=
.
+(…(i1*s2+i2)*s3…+ik)
.
  (k=1,2,…n-1)
  以上的等式右边都是指针加常数,目标长为lk。
  数组元素的地址计算
  array[i1][i2]…[in]=
.
+(…(i1*s2+i2)*s3…+in)*sizeof(type)
.
  这儿是第一个元素地址,因此等式右边是作地址值相加。
  我们用(图9.14)表示一个具体数组int abc [3][4][2];的排列及各种指针所指向的位置。
图 9.14 数组元素排列