动态数组定义
时间:2010-08-22 来源:hisky1983
int *p = ( int* )malloc( n * sizeof( int ) );
离散动态数组的定义
int **p = (int**)malloc(m*sizeof(int *));
for (int i=0;i<m;i++){
p[i] = (int*)malloc(n*sizeof(int));
}
p只是保存了每个一维数组的首地址,这样的存储区是不连续的。释放离散动态数组:
for( int i=0;i<m;i++){
free(p[i]);
}
free(p);
连续动态数组定义:
int *p=(int*)malloc(m*n*sizeof(int));
int **q=(int**)malloc(m*sizeof(int*));
for(int i=0;i<m;i++){
q[i] = p+i*n;
}
首先分配连续的m*n的存储空间,然后q指向中间地址,相当于每一维德开始地址。
释放空间的时候直接释放p、q就可以了
free(q);
free(p);
连续的空间是支持空间扩展了,比如m*n数组扩展为k*j
int *p=(int *)realloc(k*j*sizeof(int));
int **q =(int**)realloc(k*sizeof(int*));
for(int i=0;i<k;i++){
q[i]=p+i*j;
}