数组发现一个问题
下面这个是怎么回事?
#include <stdio.h>
void main()
{
int num[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf( "%d\n ",num[0][11]);
printf( "%d\n ",num[1][7]);
printf( "%d\n ",num[2][3]);
}
为什么运行上面的程序后,得到了 num[0][11]==num[1][7]=num[2][3]=12 啊?
数组下标都越界了啊,怎么还可能对啊?
[解决办法]
理解这个问题也不是很复杂的:
1.数组在定义时候分配的内存空间是连续的,不管是一维数组还是二维的,例如int a[],还是int[][],千万不要把二维数组理解成像线行代数的矩阵样子,
因此int[3][4]与int[12]在物理上存贮一样的
2.二维数组,如int[3][4]中int[0],int[1],int[2]是行地址,所以num[0][11]==num[1][7]=num[2][3]都指的是同一个数,即int[3][4]的第12个数据,
[解决办法]
晕 跟地址连续性有什么关系啊 C处理二维数组就是把下标引用转换为指针 用第一个下标乘以第二维的大小加上第二个下标 然后跟数组首地址计算的 这几个算出来一样的