关于二维数组 内存基本有关问题

关于二维数组 内存基本问题
#include<stdio.h>
void main()
{
int *p=NULL,i;
int a[3][4]={
1,2,3,4,
5,6,7,8,
9,10,11,12};



for (i=0;i<=2;i++)
{

printf("%#X\n",a);
printf("%#X\n",a+i); 求这里为什么 a每次加1 它的地址多是以10为单位进的 
  比喻 0X12FF54 加1后变成 0X12FF64它内部是怎么计算的求
   
printf("%d\n",a[i][0]);
// printf("%d\n",a[1][0]);
// printf("%#X\n",&a[1][0]);
printf("\n");
}
*/
}


------解决方案--------------------
a+1 就是4个int, 就是4*4 16个字节
------解决方案--------------------
首先,“它的地址多是以10为单位进的”这句话有问题,应该是以16为单位进的。如楼上所说,a+1,就将a移动了16个字节,这就相当于在二维数组中,将a的指向移动到了数组的下一行。(*a)+1是将a往右移动一列,而a+1是向下移动一行。不知道我有没有说清楚。
------解决方案--------------------
探讨

0X12FF4C
0X12FF5C 10 这里不懂啊

------解决方案--------------------
探讨
首先,“它的地址多是以10为单位进的”这句话有问题,应该是以16为单位进的。如楼上所说,a+1,就将a移动了16个字节,这就相当于在二维数组中,将a的指向移动到了数组的下一行。(*a)+1是将a往右移动一列,而a+1是向下移动一行。不知道我有没有说清楚。

------解决方案--------------------
十进制的16就等16进制的10