一、动态申请二维空间
方法一、二维都未知情况
int nRow = 4; int nCol = 8; int nValue = 0; int **p2Dim = NULL; p2Dim = new int *[nRow]; //申请空间 for (int nIndex=0; nIndex<nRow; nIndex++) { p2Dim[nIndex] = new int [nCol]; } //赋值 for (int nRowIndex=0; nRowIndex<nRow; nRowIndex++) { for (int nColIndex=0; nColIndex<nCol; nColIndex++) { p2Dim[nRowIndex][nColIndex] = nValue; nValue++; } } //输出 for (int nRowIndex=0; nRowIndex<nRow; nRowIndex++) { for (int nColIndex=0; nColIndex<nCol; nColIndex++) { TRACE("%d\t", p2Dim[nRowIndex][nColIndex]); } TRACE("\n"); } //删除空间 for (int nIndex=0; nIndex<nRow; nIndex++) { delete [] p2Dim[nIndex]; p2Dim[nIndex] = NULL; } delete [] p2Dim; p2Dim = NULL;
方法二、二维都未知情况(申请连续空间)
int nRow = 4; int nCol = 8; int nValue = 0; int **p2Dim = NULL; p2Dim = new int *[nRow]; //申请空间 p2Dim[0] = new int [nRow*nCol]; //一次性分配所有空间 for (int nIndex=1; nIndex<nRow; nIndex++) { p2Dim[nIndex] = p2Dim[nIndex-1] + nCol; //要不*sizeof(int),因为这里是指针的运算; } //...
//删除空间 delete [] p2Dim[0]; delete [] p2Dim; p2Dim = NULL;
方法三、明确行列大小
const int nRow = 5; const int nCol = 8; int nValue = 0; int (*p2Dim)[nCol]; //数组指针,每个数组里都是一个指针变量 p2Dim = new int[nRow][nCol]; TRACE("%d\n", sizeof(p2Dim)); //nRow TRACE("%d\n", sizeof(p2Dim[0])); //nCol*sizeof(int) delete [] p2Dim;
方法四、只知道一维情况
const int nRow = 5; //c++中nRow是常量 int nCol = 8; int nValue = 0; int *p2Dim[nRow]; //指针数组 for (int nIndex=0; nIndex<nRow; nIndex++) //注意这里nRow是一个常量,若是变量则会出现异常(测试时当nRow小时没有较大时则有异常??) { p2Dim[nIndex] = new int [nCol]; } TRACE("%d\n", sizeof(p2Dim)); //nRow*sizeof(int) TRACE("%d\n", sizeof(p2Dim[0])); //sizeof(int) for (int nIndex=0; nIndex<nRow; nIndex++) { delete [] p2Dim[nIndex]; p2Dim[nIndex] = NULL; }
方法五、只知道一维(申请连续空间)
const int nRow = 5; int nCol = 8; int nValue = 0; int *p2Dim[nRow]; //指针数组 p2Dim[0] = new int [nRow*nCol]; //得到连续的空间,最好对申请空间做个判断是否成功 for (int nIndex=1; nIndex<nRow; nIndex++) //nRow是常量 { p2Dim[nIndex] = p2Dim[nIndex-1] + nCol; //要不*sizeof(int),因为这里是指针的运算; } for (int nIndex=0; nIndex<nRow; nIndex++) { for (int nY=0; nY<nCol; nY++) { p2Dim[nIndex][nY] = nValue; nValue++; } } for (int nIndex=0; nIndex<nRow; nIndex++) { for (int nY=0; nY<nCol; nY++) { TRACE("%d\t",p2Dim[nIndex][nY]); } TRACE("\n"); } TRACE("%d\n", sizeof(p2Dim)); //nRow*sizeof(int) TRACE("%d\n", sizeof(p2Dim[4])); //sizeof(int) delete [] p2Dim[0];
浙公网安备 33010602011771号