一、动态申请二维空间

方法一、二维都未知情况

   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];

 

posted on 2012-08-26 02:45  走出地平线  阅读(116)  评论(0)    收藏  举报