函数传参(char *)类型

函数之间传递char *类型的参数,需要注意传递的是地址, 还是字符串;

两者的目的不同:

1.如果是地址则是对这个原数据进行修改操作;

2.如果是字符串,则是使用该参数;

#include <stdio.h>


void Prin_1(char *pcName)
{
    printf("Prin : %s\n", pcName);
    printf("Prin : 0x%x\n", pcName);

}

void Prin_2(char *pcName)
{
    printf("prin_2 : 0x%x\n", pcName);
    *pcName = "luojun\n";
}


int main()
{
    char *name = "leiweizhe";

    printf("%s\n", name);
    printf("0x%x\n", name);
    printf("0x%x\n", &name);

    Prin_1(name);

    Prin_2(&name);

    printf("%s\n", name);
    return 0;

}
leiweizhe
0x40402f
0x61fe18
Prin : leiweizhe
Prin : 0x40402f
prin_2 : 0x61fe18
luojun


Process returned 0 (0x0)   execution time : 0.068 s
Press any key to continue.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
} private void closeCamera() { if (cameraCaptureSession != null) { cameraCaptureSession.close(); cameraCaptureSession = null; } if (cameraDevice != null) { cameraDevice.close(); cameraDevice = null; } 将 Java 的 `byte[]` 数组作为参数传递给 C++ 接口,并将其转换为 `char*` if (mediaRecorder != null) { mediaRecorder.release(); mediaRecorder = null; } } @Override ,可以使用 JNI 中的 `GetByteArrayElements()` 函数获取 `byte[]` 数组数据,然后将其转换为 `char*`。 以下是一个示例代码: Java 代码: ```java public class MyClass { static { System.loadLibrary protected void onPause() { stopRecording(); closeCamera(); super.onPause(); } @Override protected void onResume("mylib"); } private native String processData(byte[] data); public static void main(String[] args) { MyClass() { super.onResume(); openCamera(); } } ``` 在这个Demo中,我们使用了TextureView来显示 myClass = new MyClass(); byte[] data = "hello".getBytes(); String result = myClass.processData(data); System.out相机预览画面。当TextureView准备好后,我们调用openCamera()方法来打开相机。在.println(result); } } ``` C++ 代码: ```cpp JNIEXPORT jstring JNICALL Java_com_example_MyClass_processData(JNIEnvCameraDevice.StateCallback的onOpened()方法中,我们获取到了CameraDevice实例后,我们调用createCameraPreview() *env, jobject obj, jbyteArray data) { jbyte* body = env->GetByteArrayElements(data, NULL); j方法来创建相机预览。在createCameraPreview()方法中,我们首先创建一个SurfaceTexture,然后将它设置size length = env->GetArrayLength(data); char* cStr = new char[length + 1]; memcpy(cStr, body为TextureView的默认缓冲区大小。接下来,我们创建一个Surface,并将它添加到CaptureRequest.Builder中。最后,我们调用cameraDevice.createCaptureSession()方法来创建CameraCaptureSession实例,并将这个Surface添加到会, length); cStr[length] = '\0'; // 这里可以调用 C++ 接口处理 cStr delete话中。 当CameraCaptureSession创建成功后,我们调用updatePreview()方法来更新相机预览。在这个[] cStr; env->ReleaseByteArrayElements(data, body, JNI_ABORT); return env->NewStringUTF("result"); } ``方法中,我们设置了CONTROL_MODE为CONTROL_MODE_AUTO,并将这个CaptureRequest添加到CameraCaptureSession中。 当用户点击` 在 C++ 中,使用 `GetByteArrayElements()` 函数获取 `byte[]` 数组数据,然后将其转换为 `char*`。在实际使用中,可以将 `char*` 作为参数传递给 C++ 接口进行“抓拍”按钮时,我们调用captureStillImage()方法来进行拍照。在这个方法中,我们首先处理。完成处理后,释放 `char*` 的内存,并将处理结果转换为 JNI 的 `jstring` 类型返回给 Java。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值