返回狼盟编程首页
编程搜索 [狼盟旧档]
论坛统计


请输入搜索关键字:
├─◆ 狼盟首页 > 查看贴子 > 详细信息

楼主

怎们动态申请一个2维数组那?


怎们动态申请一个2维数组那?例如b[n][n];(c语言)    int**b=malloc(n*n*sizeof(int));  for(i=0;i<n;i++)//初始化邻接矩阵    for(j=0;j<n;j++)     b[i][j]=0;哪错了?





justforfun626 [ 1 楼 ]
2006-05-31 23:24:00
int** p = malloc( rows*cols*sizeof(int) ); 

405614518 [ 2 楼 ]
2006-05-31 23:29:00
那则么使用b[2][3]? 

sarrow [ 3 楼 ]
2006-05-31 23:49:00
funfun兄的不对!int** p = (int**)malloc(sizeof(int*)*rows);for (int i = 0; i < rows; i++) {    p[i] = (int*)malloc(sizeof(int)*cols);}或者int (*p)[cols] = (int(*)[cols])malloc(sizeof(int)*rows*cols);下面的方法节省了rows个指针的内存... 

sarrow [ 4 楼 ]
2006-05-31 23:50:00
不过,下面的方法,在低级的C编译器中可能不被支持... 

格子裙 [ 5 楼 ]
2006-06-01 00:19:00
(转)C++中二维数组new小结    二维数组new小结 转至水木清华 1.    A (*ga)[n] = new A[m][n];    ...    delete []ga;缺点:n必须是已知 优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)2. A** ga = new A*[m];    for(int i = 0; i < m; i++)        ga[i] = new A[n];    ...    for(int i = 0; i < m; i++)        delete []ga[i];    delete []ga;缺点:非连续储存,程序烦琐,ga为A**类型 优点:调用直观,n可以不是已知3.  A* ga = new A[m*n];    ...    delete []ga;缺点:调用不够直观 优点:连续储存,n可以不是已知4. vector<vector<A> > ga;    ga.resize(m);                       //这三行可用可不用    for(int i = 1; i < n; i++)          //        ga[i].resize(n);                //    ...缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大) 优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长5.  vector<A> ga;    ga.resize(m*n);方法3,4的结合6. 2的改进版(Penrose提供,在此感谢)   A** ga = new A*[m];    ga[0] = new A[m*n];    for(int i = 1; i < m; i++)        ga[i] = ga[i-1]+n;    ...    delete [] ga[0];    delete [] ga;缺点:程序烦琐,ga为A**类型 优点:连续储存,调用直观,n可以不是已知 

sarrow [ 6 楼 ]
2006-06-01 00:31:00
6. 2的改进版(Penrose提供,在此感谢)   A** ga = new A*[m];    ga[0] = new A[m*n];    for(int i = 1; i < m; i++)        ga[i] = ga[i-1]+n;    ...    delete [] ga[0];    delete [] ga;比较搞笑的用法... 

405614518 [ 7 楼 ]
2006-06-01 22:44:00
谢谢3楼了