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 = int
和 g = 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);
我必须将代码从 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 = int
和 g = 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
, andg
= usual array ofint
.
不,正如您发现的那样,这不是一个可能的调用。 :-) 您需要传入数组引用,而不是 int
,所以也许:
dot(g, x, y, z);