讲解memcpy(MatLab引擎)的使用
Explain the use of memcpy (MatLab engine)
我有在 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*)
是 explicit(C 风格)转换,它将 any 指针转换为 void[=26= 的指针].
但是不需要它,因为它可以隐式发生:
int *pointer_to_int;
void *pointer_to_void = (void*)pointer_to_int;//explicit cast
pointer_to_void = pointer_to_int; //implicit cast
我有在 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*)
是 explicit(C 风格)转换,它将 any 指针转换为 void[=26= 的指针].
但是不需要它,因为它可以隐式发生:
int *pointer_to_int;
void *pointer_to_void = (void*)pointer_to_int;//explicit cast
pointer_to_void = pointer_to_int; //implicit cast