声明的数组在内存中一定是连续存放的吗??
用malloc,calloc分配的是连续内存。但是象a[100]是不是也是呢??
如果是的话a[10][10]这一类的是不是也是这样的呢??下边是我编的一段程序
#include <stdio.h>
#include <memory.h>
void main()
{
char a[3][3][4][5];
memset(a[0][0][0],8,sizeof(char)*180);
printf( "%d ",a[2][2][3][9]);
}
输出为8
我现在不能确定是不是在所有的情况下分配的内存都是连续的呢???
高手给我剖析一下!!先谢过了
[解决办法]
&a[n] = &a[0] + n*sizeof(T) 可证a[n]内存连续。
[解决办法]
对于内建数组类型,不管是多少维数组,在内存中都是连续的。
但也有些不连续内存组成的动态二维数组,比如
int i, j;
int n=10, m=20;
int ** p = (int**)malloc(n*sizeof(int*));
for (i=0; i <n; i++)
p[i] = (int*)malloc(m*sizeof(int));
for (i=0; i <n; i++)
for (j=0; j <m; j++)
p[i][j] = i+j;
for (i=0; i <n; i++)
free(p[i]);
free(p);
这里的动态二维数组每行的元素是连续的,但是行与行之间在内存中是不一定连续的。