首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组发现一个有关问题

2012-03-20 
数组发现一个问题下面这个是怎么回事?#includestdio.hvoidmain(){intnum[3][4]{1,2,3,4,5,6,7,8,9,10,1

数组发现一个问题
下面这个是怎么回事?

#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处理二维数组就是把下标引用转换为指针 用第一个下标乘以第二维的大小加上第二个下标 然后跟数组首地址计算的 这几个算出来一样的

热点排行