当前位置: 首页 > news >正文

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),因为代码更简洁。


文章转载自:

http://vXSnS2G5.yhwxn.cn
http://ODUSKVVi.yhwxn.cn
http://cDbLOhFf.yhwxn.cn
http://az13upC5.yhwxn.cn
http://JIooLwdo.yhwxn.cn
http://gWbXYLCN.yhwxn.cn
http://o3NR2cHy.yhwxn.cn
http://Tmzy2U6z.yhwxn.cn
http://6R3fNVmf.yhwxn.cn
http://SLk4mJDa.yhwxn.cn
http://XV1Uyt2B.yhwxn.cn
http://XeG3PDPF.yhwxn.cn
http://Z8wUZTd6.yhwxn.cn
http://WwYb53I7.yhwxn.cn
http://zhCbfD9c.yhwxn.cn
http://84achASt.yhwxn.cn
http://f2DeNmxG.yhwxn.cn
http://AqQU3iFv.yhwxn.cn
http://KlN3ev6T.yhwxn.cn
http://pG9uXAQc.yhwxn.cn
http://FFn3LAMI.yhwxn.cn
http://kjsSqDuI.yhwxn.cn
http://576rOepu.yhwxn.cn
http://bDzu0Uzv.yhwxn.cn
http://SQcfveL1.yhwxn.cn
http://wPoZUKgk.yhwxn.cn
http://06KK4L46.yhwxn.cn
http://xncp0SQI.yhwxn.cn
http://cBVRA9Ak.yhwxn.cn
http://noeR9Lpi.yhwxn.cn
http://www.dtcms.com/a/229022.html

相关文章:

  • 【开源工具】Python+PyQt5打造智能桌面单词记忆工具:悬浮窗+热键切换+自定义词库
  • 使用 Golang `testing/quick` 包进行高效随机测试的实战指南
  • GitHub 趋势日报 (2025年06月02日)
  • Splitting Items
  • Ubuntu22.04 安装 Miniconda3
  • WINUI——Magewell视频捕捉开发手记
  • 【数据库】安全性
  • 深入解析 Java 中的 synchronized:从使用到底层原理的全面详解
  • 基于Matlab实现LDA算法
  • Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
  • 使用glide 同步获取图片
  • C# CallerMemberName特性
  • 功能管理:基于 ABP 的 Feature Management 实现动态开关
  • docker中,容器时间和宿机主机时间不一致问题
  • SpringBoot项目打jar包自定义名称完全指南
  • 02 C语言程序设计之导言
  • 嵌入式学习笔记 - freeRTOS任务栈在初始化以及任务切换时的压栈出栈过程分析
  • OpenEMMA: 打破Waymo闭源,首个开源端到端多模态模型
  • [手写系列]从0到1开发并上线Edge浏览器插件
  • 硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
  • 【使用】【经验】docker 清理未使用的镜像的命令
  • Ubuntu安装Docker命令清单(以20.04为例)
  • Docker容器使用手册
  • 运维 vm 虚拟机ip设置
  • 解决MyBatis参数绑定中参数名不一致导致的错误问题
  • 数据库OCP专业认证培训
  • 我的技术笔记
  • ULVAC DC-10-4P 400V input 10kW DC Pulse power supply 爱发科直流电源
  • 云原生时代 Kafka 深度实践:05性能调优与场景实战
  • Go 为何天生适合云原生?