我将为此function制作什么function原型?

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 **); 

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

现在尝试一下

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

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

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

甚至结合haccks的答案 :

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

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

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

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

是合法的C.

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

 #include  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; }