【问题标题】:What Function Prototype Would I Make for this Function?我将为这个功能制作什么功能原型?
【发布时间】:2015-04-19 19:15:50
【问题描述】:
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 **);

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

【问题讨论】:

    标签: c


    【解决方案1】:

    现在试试这个

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

    【讨论】:

      【解决方案2】:

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

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

      甚至可以结合黑客的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;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-03
        • 1970-01-01
        • 2018-12-19
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2021-07-24
        相关资源
        最近更新 更多