一.静态二维数组:
1.格式:a[2][3];
2.内存分配:仅在栈中分配1个int[6]数组。
3.分析:
(1)&a为二维数组指针。
(2)a + i为一维数组指针。
(3)a[i] + j为元素指针。
(4)a[i][j]为元素值。
(5)&a, a, a[0]的值相同,均为数组首元素地址值,只是类型不同而已。
(6)一维和二维数组的原理是相同的,只不过又进了一层而已。
二.动态二维数组:
1.格式:
int **p;
int i;
p = malloc(sizeof(int*)*m);
for(i=0; i<m; i++)
{
*(p+i) = malloc(sizeof(int)*n);
}
2.内存分配:堆中开辟空间存储二维元素和一维数组指针,栈中定义二维数组指针。
3.分析:
(1)寻址方式和静态数组相同,*(*(p+i)+j)来寻址该数组的第i行第j列的元素。
(2)&a, a, a[0]的值并不相同,&a为栈中p指针变量的地址,a为堆中一维指针数组首地址,a[0]为二维数组元素首地址。