这和&符号表示在C?

时间:2018-03-12 04:39:17

标签: c java-native-interface

我在一个使用JNI的项目中得到以下代码。到现在为止我可以理解这是一个结构数组并输入为JNINativeMethod,第一个名称是在Java代码中定义的方法("描述","运行_" ...),第二个定义方法类型和返回类型,第三个是方法指针。

但这是什么'&'符号表示方法名称之前,例如"(void *)& Java_Test_description"?这是一个基本问题,抱歉,我没有从互联网上找到任何有用的信息。我看到JNI的一些指南只是使用这种方式,如#34;(void *)Java_Test_description",它没有使用这个'&'符号

jni.c中的代码
static JNINativeMethod classTest_methods[] = {
{ "description", "()Ljava/lang/String;", (void *)&Java_Test_description },
{ "skip", "()Z", (void *)&Java_Test_skip },
{ "skip_reason", "()Ljava/lang/String;", (void *)&Java_Test_skip_reason },
{ "run_", "(I)Z", (void *)&Java_Test_run_ },                               
};

2 个答案:

答案 0 :(得分:1)

& 会返回其后的实体的地址;在这种情况下,JNI方法描述使用实现本机方法的全局函数的地址。这些描述的列表将传递给 RegisterNatives() JNI函数。

在这种情况下,& address operator可以省略,因为对于函数

jboolean Java_Test_run_(int n);

C编译器解析

(void *)Java_Test_run_ 

相同
(void *)&Java_Test_run_

答案 1 :(得分:0)

该符号是地址运算符。在任何变量之前使用它将返回后者的内存地址。

当你想避免处理由函数创建的变量副本时,它会很有用。

通过引用/地址传递值:http://cs-fundamentals.com/tech-interview/c/difference-between-call-by-value-and-call-by-reference-in-c.php