Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数声明中的数组大小_C_Arrays_Prototype_Declaration - Fatal编程技术网

C 函数声明中的数组大小

C 函数声明中的数组大小,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

我想使用一个函数,它以固定大小的二维数组作为参数。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_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