欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > android NDK 的 -> 是什么意思

android NDK 的 -> 是什么意思

2025/6/7 1:22:22 来源:https://blog.csdn.net/wulong756273/article/details/148394655  浏览:    关键词:android NDK 的 -> 是什么意思

-> 是什么意思????

在 C++ 中,env->CallVoidMethod() 中的 -> 是 成员访问运算符(也称为箭头运算符),它用于通过指针访问对象的成员函数或成员变量。

-> 的含义

  • env 是一个 指针(指向 JNIEnv 结构体或类)。

  • -> 用于通过指针访问其指向对象的成员(类似于 . 运算符,但 . 用于直接访问对象的成员,而 -> 用于指针)。

  • // 假设有一个结构体/类 JNIEnv
    struct JNIEnv {void CallVoidMethod(...);
    };// 情况1:env 是对象(直接使用 . 访问成员)
    JNIEnv env;
    env.CallVoidMethod(...);// 情况2:env 是指针(使用 -> 访问成员)
    JNIEnv* env = ...;
    env->CallVoidMethod(...);

 为什么 JNI 里用 ->

在 JNI 中:

  • JNIEnv 实际上是一个 指向函数表的指针(在 C++ 中,它被封装成一个类,但仍然是指针)。

  • 因此,必须使用 -> 访问它的方法(如 CallVoidMethod)。

  • ​​​​​​​

 C 语言 vs C++ 的 JNIEnv 调用方式

  • C++ 风格env->CallVoidMethod()):

    cpp文件:

    env->CallVoidMethod(obj, methodID, ...);
  • C 风格(*env)->CallVoidMethod(env, ...)):

    c文件:

    (*env)->CallVoidMethod(env, obj, methodID, ...);
    ​​​​​​​

在 C 中,JNIEnv 是一个 指向函数表指针的指针,所以需要先解引用 (*env),再用 -> 访问方法。

并且,env 必须作为第一个参数传入(因为 C 没有隐含的 this 指针)。

总结

情况示例说明
C++ JNIenv->CallVoidMethod(...)env 是指向 JNIEnv 的指针,直接用 -> 访问方法
C JNI(*env)->CallVoidMethod(env, ...)env 是指向指针的指针,先解引用 (*env),再用 -> 访问方法

在 Android NDK 开发中,通常使用 C++ 风格的调用(env->XXX),因为代码更简洁。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词