我想使用一个以固定大小的二维数组作为参数的函数。 nm_pipe的值在执行期间是已知的,而另一维的值始终为2.
int main(int argc, char const *argv[]){
int num=2;
int nm_pipes;
/*some code that computes nm_pipe*/
int pipe_container[nm_pipes][num];
fill_pipe_container(nm_pipes,pipe_container);
}
现在,我对函数fill_pipe_containter
的声明有疑问。
如果我尝试这样的话
void fill_pipe_container(const int nmp,int pc[][]);
我收到错误,因为数组没有边界。
如果我试试这个:
void fill_pipe_container(const int nmp,int **pc);
由于类型转换,我也收到错误。
我也试过这个
void fill_pipe_container(const int nmp,int (*pc)[2]);
但我很确定这是错误的,因为这意味着我希望指针在2个元素的数组上,但程序会编译这个。
我也可以这样做:
void fill_pipe_container(const int nmp,int pc[][2]);
但我希望能够在不明确给出任何大小的情况下声明该函数。声明此功能的正确方法是什么?我应该避免什么?
答案 0 :(得分:1)
试试void fill_pipe_container(const int nmp,int pc[][num])
。应该工作。
答案 1 :(得分:1)
void fill_pipe_container(const int nmp,int (*pc)[2]);
这是正确的。为什么你认为这是错的?
答案 2 :(得分:0)
您可以使用:
void fill_pipe_container(const int nmp,int **pc);
并在函数调用中使用:
int **pipe=(int **)pipe_container;
fill_pipe_container(nm_pipes,pipe);
答案 3 :(得分:0)
在堆中分配数组的内存:
int **pipe_container=(int **)malloc(nm_pipes*sizeof(int *));
int i;
for(i=0;i<nm_pipes;i++)
pipe[i]=(int *)malloc(num*sizeof(int));
原型:
void fill_pipe_container(const int nmp,int **pc);
然后调用函数:
fill_pipe_container(nm_pipes,pipe);