解释memcpy(MatLab引擎)的使用

Explain the use of memcpy (MatLab engine)

本文关键字:引擎 memcpy MatLab 解释      更新时间:2023-10-16

我有在 MatLab 中运行模拟的背景,目前正在学习运行模拟C++,同时仍然使用 MatLab 通过 MatLab 引擎进行绘图。下面的代码显示了我编写的一段示例代码,用于生成变量,将其传递给 MatLab 工作区,绘制它,然后将另一个变量传递回C++。

#include <iostream>
#include "engine.h"
//#include "mex.h"

using namespace std;
void main()
{
    //Create pointer for matlab engine
    Engine *matlab;
    //Open matlab engine interface
    matlab = engOpen("null");
    //Create variable
    double timedata[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    mxArray *T = mxCreateDoubleMatrix(1, 10, mxREAL);
    memcpy((void *)mxGetPr(T), (void *)timedata, 10 * sizeof(double));
    //Put variable into workspace
    engPutVariable(matlab, "workspaceT", T);
    //Evaluate strings in MatLab
    engEvalString(matlab, "D = workspaceT+2;");
    engEvalString(matlab, "plot(workspaceT,D);");
    //Get variable from MatLab workspace
    mxArray *d = engGetVariable(matlab, "D");
    double b[10];
    for (int i = 0; i < 9; i++)
    {
        b[i] = (double)mxGetPr(d)[i];
        cout << b[i];
    }
    cout << endl;
    system("pause");
    //Close matlab engine interface
    engClose(matlab);

}

我特别感兴趣的部分是这个...

memcpy((void *)mxGetPr(T), (void *)timedata, 10 * sizeof(double));

我完全不知道这段代码在做什么。我看了一下文档(http://www.cplusplus.com/reference/cstring/memcpy/),它并没有完全启发我。我特别没有得到的部分是使用(void *)。正如我所说,我的背景是 MatLab,所以我不完全是C++方面的专家,所以如果有人能像我五岁一样解释这里发生的事情,将不胜感激!

谢谢

塞布。

这是

memcpy的原型

void * memcpy ( void * destination, const void * source, size_t num );

memcpy的前 2 个参数是void*(void*)显式(C 样式)强制转换,它将任何指向指针的指针强制转换为 void

但是,它不是必需的,因为它可以隐式发生:

int *pointer_to_int;
void *pointer_to_void = (void*)pointer_to_int;//explicit cast
pointer_to_void = pointer_to_int; //implicit cast