我必须将代码从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[]
参数是什么?我之前从未见过这个,并且在参数名称"之后没有找到关于"方括号的任何内容。
我唯一可以想象的是,这是某种偏移的东西,比如将g[0]*x
翻译成g[i+0]*x
?
答案 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
=int
,g
=通常的int
数组。
不,正如您所发现的,这不是一个可能的电话。 :-)你需要传入一个数组引用,而不是int
,所以也许:
dot(g, x, y, z);
答案 2 :(得分:1)
int g[]
表示将整数类型数组作为参数传递。所以你不能在dot(g[i], x, y, z);
这里做,因为它只传递一个索引。
假设您有一个数组arr[10]
,您可以写dot(arr, x, y, z);