Java参数名后面的方括号"int g[]"?

Java square brackets behind parameter name "int g[]"?

我必须将代码从 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[] 参数是什么东西?我以前从未见过这个,也没有找到任何关于 "square brackets after parameter name".

的信息

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

参数中的

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

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

在Java,写这个...

int[] a;

...与...相同

int a[];

这是 Java 早期的遗留问题,可帮助 C/C++ 程序员更轻松地采用该语言(和移植代码)。

Java 允许声明如...

int a, b, c[];

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

在Java中,惯例是远离这一点,每行一个声明,即....

int a;
int b;
int[] c;

What is this weird int g[] parameter thing?

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

The [] may appear as part of the type at the beginning of the declaration, or as part of the declarator for a particular variable, or both.

关于您的来电:

This is a possible call:

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

Where: i = int, and g = usual array of int.

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

dot(g, x, y, z);