C++怎么定义一个动态二维数组



int **parray;
pa触骇鞭较庄记彪席波芦rray = new int8[5];
for (int i=0 i<5; ++i)
{
parray[i] = new int(0);
}

for (int i=0; i<5; ++i)
{
delete parray[i];
}
delete[] parray;
int x,y,**p;
cin>>x>>y触骇鞭较庄记彪席波芦;
p=new int*[x];
for(int i=0;i<x;i++)
p[i]=new int[x];
int row, col;
cin >> row >> col;
int** ptr = new int* [row];
for(int i=0; i<row; i++)
{
ptr[i] = new int [col];
}
//使用之后一定要记得释放内存
for(int j=0; j<row; j++)
{
delete [] ptr[j];
}
delete [] ptr;
#include <vector>
typedef vector<vector<int> > matrix;
这样matrix就是二维数组了,可以用push_back()动态往里面添加元素 ,不用预先定义数组大小
两种方法:
1.转化为一维数组申请
2.先申请全部行首指针,再按行逐行申请

1.
a=(int *)malloc(sizeof(int),(unsigned)m*n);
使用的时候就和一般的二维数组一样。
举个例子给你:
#include "stdlib.h"
#include "stdio.h"
#include <malloc.h>

int main()
{
int i,j;
int n;//这个就是需要指定的行数
int (*p)[10];

scanf("%d",&n);//取得行数

//动态生成二维数组,指定列数为10,如果想改,自己该里面
的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int));
p=(int (*)[10])malloc(n*10*sizeof(int)); //动态申请n行10列的二维数组

for(i=0;i<n;i++)
for(j=0;j<10;j++)
p[i][j]=i*j;

for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
printf("%d,",p[i][j]);

printf("\n");
}
free(p);

return 0;
}

2.
这个也给你举个例子吧:
#include <stdio.h>
#include <malloc.h>
main()
{
int i = 0;
int j = 0;
int line = 0;
int row = 0;
int **p = NULL;

printf("input the line of the array:\n");
scanf("%d", &line);
printf("input the row of the array:\n");
scanf("%d", &row);

p = (int **)malloc(sizeof(int *) * line);
if (NULL == p)
{
return;
}
for (i = 0; i < line; i++)
{
*(p + i) = (int *)malloc(sizeof(int) * row);
if (NULL == *(p + i))
{
return;
}
}
/*input data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
p[i][j] = i + 1;
}
}
/*output data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
printf("%d", p[i][j]);
}
}
/*free every line point*/
for (i = 0; i < line; i++)
{
free(*(p + i));
p[i] = NULL;
}

free(p);
p = NULL;
}

第一种方法数组创建和释放都比较简单



Copyright © 2009-2011 All Rights Reserved.