C 函数声明中的数组大小
我想使用一个函数,它以固定大小的二维数组作为参数。nm_管道的值在执行过程中是已知的,而其他维度的值始终为2C 函数声明中的数组大小,c,arrays,prototype,declaration,C,Arrays,Prototype,Declaration,我想使用一个函数,它以固定大小的二维数组作为参数。nm_管道的值在执行过程中是已知的,而其他维度的值始终为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_co
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\u pipe\u container
的声明有问题
如果我尝试这样的事情
void fill_pipe_容器(const int nmp,int pc[])代码>
我得到一个错误,因为数组没有边界
如果我尝试这样做:
填空管道容器(施工单位为nmp,施工单位为**pc)代码>
由于类型转换,我还收到一个错误
我也试过这个
填空管道容器(const int nmp,int(*pc)[2])代码>
但我很确定这是错误的,因为这意味着我希望在一个由2个元素组成的数组上有一个指针,但是程序用这个元素编译
我也可以这样做:
填空管道容器(const int nmp,int pc[][2])代码>
但是我希望能够在不显式给出任何大小的情况下声明函数。声明此函数的正确方法是什么?我应该避免什么?尝试空填充管道容器(const int nmp,int pc[][num])
。应该可以正常工作。您可以使用:
void fill_pipe_container(const int nmp,int **pc);
int **pipe=(int **)pipe_container;
fill_pipe_container(nm_pipes,pipe);
在函数调用中使用以下命令:
void fill_pipe_container(const int nmp,int **pc);
int **pipe=(int **)pipe_container;
fill_pipe_container(nm_pipes,pipe);
这个是正确的。为什么您认为这是错误的?在堆中分配数组的内存:
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));
然后调用函数:
fill_pipe_container(nm_pipes,pipe);
嗯,不,这给了我一个错误:无法将'int(*)[2]'转换为'int**'
以及您在使用空填充管道容器(const int nmp,int**pc)时遇到的错误代码><代码>错误:无法将“int**”转换为“int**”
?:)尝试void fill\u pipe\u container(const int nmp,int pc[][num])
。应该可以工作。我得到错误:无法将参数“2”的'int(*)[2]'转换为'int**'到'void fill_pipe_container(int,int**)
我想这是因为我使用固定大小的数组fill_pipe_container(nm_pipes,pipe_container)调用它代码>是的,它可以工作。但正如我在帖子中所说,我想知道什么是最好的方法。在函数声明中没有使用num
或2
。我也尝试过这样做,但在尝试修改函数fill\u pipe\u容器中的元素时,这样做会导致segfault:pc[0][0]=4例如,是的,事实上我很困惑。这是一个正确的可能性。我不想在这里使用malloc,因为我有一个固定大小的数组,这完全是你的选择。无论您是否拥有固定大小的数组,您都可以静态或动态分配您想要的任何内容!而且,答案只是为了满足您在声明函数时不使用数组大小的愿望!不管怎样,我还是帮了我!谢谢是的,它确实允许在不使用数组大小的情况下声明函数,谢谢您的提醒!