我将为此功能制作什么功能原型?

时间:2015-02-18 17:08:01

标签: c

int myFunc(int a, int b, int c, int d[][c]) {
    //code
}

我试过这个:

int myFunc(int, int, int, int *);

而且:

int myFunc(int, int, int, int *[int]);

而且:

int myFunc(int, int, int, int **);

但它们似乎都不起作用。我认为我无法确定最后一个参数的类型。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

现在试试这个

int myFunc(int a, int b, int c, int (*)[c]);

答案 1 :(得分:3)

如果您想跳过签名的所有参数名称,那么从C99标准开始,您就可以使用它:

int myFunc(int, int, int, int [][*]);

甚至与haccks的answer结合使用:

int myFunc(int, int, int, int (*)[*]);

请注意,这两种形式都是等价的,更像是偏好问题,需要采取哪种形式。

[*]表示数组大小是从其先前的参数中获取的,您无需确切地确定需要采用哪一个。可能会有不止一个,因此遵循声明:

int someFunc(int m, int n, int [][m+n]);

在C中是合法的。

这是基本程序,所以你可以看到它适合你:

#include <stdio.h>

int myFunc(int, int, int, int [][*]);

int myFunc(int a, int b, int c, int d[][c]) {
    return d[0][0];
}

int main(void)
{       
    printf("%d\n", myFunc(1, 1, 2, (int[1][2]){{3, 5}}));

    return 0;
}