关于二维数组 内存基本有关问题
关于二维数组 内存基本问题
#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是向下移动一行。不知道我有没有说清楚。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
十进制的16就等16进制的10
#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是向下移动一行。不知道我有没有说清楚。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
十进制的16就等16进制的10