读书人

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

发布时间: 2012-08-14 10:39:57 作者: rapoo

关于二维数组 内存基本问题
#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

读书人网 >C语言

热点推荐