C++动态二维数组
用new动态分配二维数组
1.用**p = new int *[]
#include
using namespace std;
int main(void)
{
int **p;
p = new int*[3];
for (int i = 0; i < 3; i++)
p[i] = new int[4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
p[i][j] = i+j;
}
for (int i = 0; i < 3; i++)
delete []p[i];
delete []p;
return 0;
}
2.用(*p)[const] = new int [var][const]
#include
using namespace std;
int main()
{
int a = 2;
int (*p)[2] = new int[a][2];
for(int i = 0; i != a; ++i)
{
for(int j = 0; j != 2; ++j)
{
p[i][j] = i+j;
cout << p[i][j] << " ";
}
}
for(int i = 0; i != a; ++i)
{
delete [] p[i];
}
return 0;
}
////////
用malloc动态分配二维数组
1.动态数组的成员都可以用正常的数组下标 Array[i][j]
#include
#include
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
for(i=0;i
for(i=0;i
for(j=0;j
Array[i][j]=1;
printf("%d ",Array[i][j]); //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
}
printf("\n");
}
free(Array);
}
2.让数组的内容连续, 但在后来重新分配列的时候会比较困难, 得使用一点指针算术:
#include
#include
void main()
{
int nrows,ncolumns;
int **Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int **)malloc(nrows*sizeof(int *));
Array[0]=(int *)malloc(nrows*ncolumns*sizeof(int));
for(i=1;i
for(i=0;i
for(j=0;j
Array[i][j]=1;
printf("%d ",Array[i][j]); //动态数组的成员都可以用正常的数组下标 arrayx[i][j]
}
printf("\n");
}
free(Array);
}
3.同一个单独的动态分配的一维数组来模拟二维数组:
#include
#include
void main()
{
int nrows,ncolumns;
int *Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int *)malloc(nrows*ncolumns*sizeof(int *));
for(i=0;i
for(j=0;j
Array[i*nrows+j]=1;
printf("%d ",Array[i*nrows+j]); //用 array3[i * ncolumns + j] 访问第 i, j 个成员
}
printf("\n");
}
free(A
rray);
}
#include
#include
#include
void **darray_new(int row, int col, int size)
{
void **arr;
arr = (void **) malloc(sizeof(void *) * row + size * row * col);
if (arr != NULL)
{
void *head;
head = (void *) arr + sizeof(void *) * row;
memset(arr, 0, sizeof(void *) * row + size * row * col);
while (row--)
arr[row] = head + size * row * col;
}
return arr;
}
void darray_free(void **arr)
{
if (arr != NULL)
free(arr);
}