2016-05-26 18 views
-1

私はMatLabでシミュレーションを実行しています.MatLabエンジンを使ってプロットするためにMatLabを使用しながらシミュレーションを実行するには現在C++を学習しています。以下のコードは、変数を生成してMatLabワークスペースに渡し、プロットし、別の変数をC++に渡すために書いたコードの例を示しています。memcpy(MatLabエンジン)の使用方法を説明してください

#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++の専門家ではないので、誰かが私が5歳であるかのようにここで何が起こっているのか説明できるなら、非常に感謝しています!ありがとう、

memcpy

答えて

1

これはmemcpy

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

のプロトタイプである最初の2つのパラメータがvoid*あります。 (void*)は、へのポインタへのポインタ へのポインタへのポインタのいずれかをキャストする明示的な(Cスタイル)キャストです。それは暗黙のうちに起こることができるので、それが必要ではないですが

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

pointer_to_void = pointer_to_int; //implicit cast 
関連する問題