C 分配动态多数组
假设我们有以下设计:C 分配动态多数组,c,multidimensional-array,malloc,dynamic-arrays,C,Multidimensional Array,Malloc,Dynamic Arrays,假设我们有以下设计: typedef struct { double **pdouble; int *pint }foo; 现在我想分配: foo *pfoo; 问题是pdouble的总数是已知的,比如说它的n;如果我们说**pdouble类似于pdouble[a][b],那么a也是已知的。表示a*b=n。但是b是动态的。平均pdouble[1]可能包含b列,pdouble[2]可能有b'列数,并且b和b',b“…将在程序中逐渐生成。 值得注意的是b+b'+b“+…=N 仅仅知道n和
typedef struct {
double **pdouble;
int *pint
}foo;
现在我想分配:
foo *pfoo;
问题是pdouble的总数是已知的,比如说它的n;如果我们说**pdouble类似于pdouble[a][b],那么a也是已知的。表示a*b=n。但是b是动态的。平均pdouble[1]可能包含b列,pdouble[2]可能有b'列数,并且b和b',b“…将在程序中逐渐生成。 值得注意的是b+b'+b“+…=N 仅仅知道n和a就可以分配foo吗 我将对它进行一点编辑,这样我的问题就更容易理解了
allocation_func(in size, int block_size)
foo *pfoo;
pfoo = (foo*) malloc(sizeof(foo))
/*some code here to do block_size number of *double which I don't know*/
foo->pdouble = (double**) malloc ( size * sizeof(double))
}
我忽略了所有人都知道的错误和其他必需的东西。仅此而已 首先分配
struct
内存
foo *pfoo = malloc(sizeof *pfoo);
然后为struct
成员double**pduble分配内存代码>
//for example purpose i take 50x50 array
pfoo->pdouble = malloc(50* sizeof(double *));
for(int i=0;i<50;i++)
pfoo->pdouble [i] = malloc(50* sizeof(double ));
“如果我们说**pdouble就像pdouble[a][b]”,那就意味着我们根本不了解什么是指针,什么是数组。你可以分配foo
,而不知道a、n、b等等。这是一个结构foo
似乎与您真正的问题无关,即理解指针和数组之间的差异,以及管理动态指针数组。令人困惑的问题。只回答了简单的分配。感谢你没有理解这个问题,只是争论为什么有人会有这样一个愚蠢的问题。还有,在这个c
codepfoo=(foo*)malloc(sizeof(foo))
中,向(foo*)转换的意义是什么?把第一个片段放进去,去掉前面的星号。所有那些*pfoo->
应该是pfoo->
。您的上一次分配可能在某一点上涉及到int
的大小。@WhozCraig谢谢。这是第一个代码片段的复制粘贴错误。@jayesh:pint=malloc(100)
应该是pint=malloc(100*sizeof(int))
@askmish编辑的答案。如果你知道数组的维数是50*50,那就好了,但是如果你有像{m_1+m_2+…+m_50}这样的数组,你知道m_1+m_2+m_3的总数…+m_50=1000,你怎么分配?
pfoo->pint=malloc(100*sizeof(int)); //100 is just for example