读书人

多位数组动态分配的有关问题

发布时间: 2012-10-18 13:46:55 作者: rapoo

多位数组动态分配的问题
void creat(int n){
int **p = new int *[n] ;
for(int i = 0 ;i < n ;i++){
p[i] = new int[n] ;
}
return ;
}

这样为什么是对的?为什么这样就不行呢?各位大大看看哈~~~
void creatmaze(int n){
int **p ;
**p = new int *[n] ;
for(int i = 0 ;i < n ;i++){
p[i] = new int[n] ;
}
return ;
}

第一行语句和第二行语句这样写就不行么?


[解决办法]
**p = new int *[n] ;改成p = new int *[n] ;
[解决办法]
int **p = new int *[n] ;

等价于

int **p ;
p = new int *[n] ;
[解决办法]
p是地址。
**p表示你指向的值。

int **p = new int *[n] ;

等价于

int **p ;
p = new int *[n] ;
[解决办法]
**p = new int *[n] ;改成*p = new int *[n] ;
每一个指针指向一个n个指针数组
[解决办法]

C/C++ code
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() {    p=(int **)malloc(4*sizeof(int *));    if (NULL==p) return;    for (i=0;i<4;i++) {        p[i]=(int *)malloc(5*sizeof(int));        if (NULL==p[i]) return;    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            p[i][j]=i*5+j;        }    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            printf(" %2d",p[i][j]);        }        printf("\n");    }    for (i=0;i<4;i++) {        free(p[i]);    }    free(p);}//  0  1  2  3  4//  5  6  7  8  9// 10 11 12 13 14// 15 16 17 18 19//在堆中开辟一个3×4×5的3维int数组#include <stdio.h>#include <malloc.h>int ***p;int i,j,k;void main() {    p=(int ***)malloc(3*sizeof(int **));    if (NULL==p) return;    for (i=0;i<3;i++) {        p[i]=(int **)malloc(4*sizeof(int *));        if (NULL==p[i]) return;        for (j=0;j<4;j++) {            p[i][j]=(int *)malloc(5*sizeof(int));            if (NULL==p[i][j]) return;        }    }    for (i=0;i<3;i++) {        for (j=0;j<4;j++) {            for (k=0;k<5;k++) {                p[i][j][k]=i*20+j*5+k;            }        }    }    for (i=0;i<3;i++) {        for (j=0;j<4;j++) {            for (k=0;k<5;k++) {                printf(" %2d",p[i][j][k]);            }            printf("\n");        }        printf("---------------\n");    }    for (i=0;i<3;i++) {        for (j=0;j<4;j++) {            free(p[i][j]);        }        free(p[i]);    }    free(p);}//  0  1  2  3  4//  5  6  7  8  9// 10 11 12 13 14// 15 16 17 18 19//---------------// 20 21 22 23 24// 25 26 27 28 29// 30 31 32 33 34// 35 36 37 38 39//---------------// 40 41 42 43 44// 45 46 47 48 49// 50 51 52 53 54// 55 56 57 58 59//--------------- 

读书人网 >C++

热点推荐