【问题标题】:Java square brackets behind parameter name "int g[]"?参数名称“int g []”后面的Java方括号?
【发布时间】:2015-03-30 22:06:03
【问题描述】:

我必须将代码从 Java 翻译成 OpenCL

我在 Java 中给出了这个函数:

float dot(int g[], double x, double y, double z) {
    return g[0]*x + g[1]*y + g[2]*z;
}

这是一个可能的调用:

dot(g[i], x, y, z);

其中:i = intg = usual array of int

int g[] 参数这个奇怪的东西是什么?我以前从未见过这种情况,也没有找到任何关于“参数名称后的方括号”的信息。

我唯一能想象的,这是某种抵消的东西,就像它把 g[0]*x 翻译成 g[i+0]*x

【问题讨论】:

    标签: java arrays parameter-passing


    【解决方案1】:

    参数中的int g[]表示传入一个整数类型数组作为参数。所以你不能在这里做dot(g[i], x, y, z);,因为它只会传递一个索引。

    假设如果你有一个数组arr[10],你可以写dot(arr, x, y, z);

    【讨论】:

      【解决方案2】:

      在 Java 中,写这个...

      int[] a;
      

      ...与...相同

      int a[];
      

      帮助 C/C++ 程序员更轻松地采用该语言(以及移植代码)是 Java 早期的遗留物。

      Java 允许声明...

      int a, b, c[];
      

      ...但不鼓励这样做(因为它是 C/C++ 的后遗症)。

      在 Java 中,约定是远离这一点,每行有一个声明,即....

      int a;
      int b;
      int[] c;
      

      【讨论】:

        【解决方案3】:

        这个奇怪的 int g[] 参数是什么东西?

        这只是int[] g 的另一种写法,含义完全相同:参数类型为int[],因此需要引用int 的数组。来自JLS §10.2

        [] 可能作为类型的一部分出现在声明的开头,或作为特定变量的声明符的一部分,或两者兼而有之。

        关于您的电话:

        这是一个可能的调用:

        dot(g[i], x, y, z);
        

        其中:i = intg = 通常的 int 数组。

        不,正如您所发现的那样,这不可能。 :-) 你需要传入一个数组引用,而不是int,所以也许:

        dot(g, x, y, z);
        

        【讨论】:

        • 好吧...查找后发现 g 是一个 2D 锯齿状数组:[][]。加上你的解释,这很有意义。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 2018-09-18
        • 1970-01-01
        • 2019-05-20
        相关资源
        最近更新 更多