首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么给二维数组分配内存空间

2013-08-01 
如何给二维数组分配内存空间本帖最后由 u011343898 于 2013-07-16 17:45:12 编辑#include iostreamusing

如何给二维数组分配内存空间
本帖最后由 u011343898 于 2013-07-16 17:45:12 编辑

#include <iostream>   
using namespace std; 
//分配内存空间
int **a;
a=(int **)malloc(1000*sizeof(int*));
for(int iw=0;iw<1000;iw++)
a[iw]=(int*)malloc(1000*sizeof(int));  
  
void f(int *p,  int row, int col);   
  
int main(void)   
{   
    int a[1000][1000];
    //....给数组a[][]赋值...
    f(&a[0][0], 20, 30);   
    return (0);   
}   
void f(int *p,  int row, int col)   
{   
    for (int i=0; i!=row; ++i)   
    {   
        p=p+i+1;  
        for (int j=0; j!=col; ++j)   
        {
            if(*p!=0) 
               num++;
            p=p+1; 
        }  
         
    }   
}  

给二维数组a[1000][1000]分配内存空间部分有问题,应如何分配?
[解决办法]
如果行数可变,可以用int(*)[1000]这种方法。

如果要列数可变,只能用int**,然后分配(列数+1)次,释放(列数+1)次,但这样你的f函数就必须修改,第一个参数要改为int**,然后用下标去访问,不能再假设a是连续存储。

如果又要列数可变,又要连续存储,则可以用一个int*,一次分配row_count * col_count * sizeof(int)大小的空间,然后访问时用a[ i * col_count + j ]代替a[i][j],也就是用一维数组模拟二维数组。

热点排行