参数名称“int g []”后面的Java方括号?

时间:2015-01-31 14:27:13

标签: java arrays parameter-passing

我必须将代码从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

3 个答案:

答案 0 :(得分:6)

在Java中,写这个......

int[] a;

...与...相同

int a[];

这是Java早期的一个遗留问题,它帮助C / C ++程序员更容易地采用这种语言(和端口代码)。

Java允许声明,例如......

int a, b, c[];

...但不鼓励这样做(因为它是C / C ++宿醉)。

在Java中,惯例是远离此,并且每行都有一个声明,即....

int a;
int b;
int[] c;

答案 1 :(得分:2)

  

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

它只是编写int[] g的另一种方式,意思完全相同:参数类型为int[],因此需要引用int数组。来自JLS §10.2

  

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

关于您的电话:

  

这是一个可能的电话:

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

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

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

dot(g, x, y, z);

答案 2 :(得分:1)

参数中的

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

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