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;iArray[i]=(int *)malloc(sizeof(*Array));
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;iArray[i]=Array[0]+i*ncolumns;
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);
}

相关主题
相关文档
最新文档