函数声明中的数组大小

时间:2013-12-06 02:21:54

标签: c arrays prototype declaration

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

但我希望能够在不明确给出任何大小的情况下声明该函数。声明此功能的正确方法是什么?我应该避免什么?

4 个答案:

答案 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);