如何给二维数组分配内存空间
本帖最后由 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],也就是用一维数组模拟二维数组。