void __fastcall TfrmFillMatrixMain::C1Click(TObject *Sender)
{
MatrixArrayFill();
float *ri;
ArrayNumber=MainRuleNo;
ArrayNo=MainRuleNo*MainRuleNo;
switch(ArrayNumber)
{
case 1:
*ri=0;
break;
case 2:
*ri=0;
break;
case 3:
*ri=0.58;
break;
case 4:
*ri=0.90;
break;
case 5:
*ri=1.12;
break;
case 6:
*ri=1.24;
break;
case 7:
*ri=1.32;
break;
case 8:
*ri=1.41;
break;
default:
*ri=0;
break;
}
float  MainScoreTemp[8];
float  *cr1get;
mxArray *a,*x,*y,*eigenvalue;
mxArray *lamda,*ci1,*cr1,*w1,*ri1;

Engine *ep;
a=mxCreateDoubleMatrix(ArrayNumber,ArrayNumber,mxREAL);
mxSetClassName(a,"a");
if(ep=engOpen(NULL))
{
memcpy((char*)mxGetPr(a),(char*)MatrixArray,ArrayNo*sizeof(float));
memcpy((char*)mxGetPr(ri1),(char*)ri,1*sizeof(float));
engEvalString(ep,"[x,y]=eig(a);eigenvalue=diag(y);lamda=eigenvalue(1);ci1=(lamda-ArrayNumber)/(ArrayNumber-1);cr1=ci1/ri1;w1=x(:,1)/sum(x(:,1));");
memcpy((char*)MainScoreTemp,(char*)mxGetPr(w1),ArrayNumber*sizeof(float));
memcpy((char*)cr1get,(char*)mxGetPr(cr1),1*sizeof(float));
}
else ShowMessage("请正确安装Matlab6.0版本以上!");
engClose(ep);
mxDestroyArray(a);
mxDestroyArray(x);
mxDestroyArray(y);
mxDestroyArray(eigenvalue);
mxDestroyArray(lamda);
mxDestroyArray(ci1);
mxDestroyArray(cr1);
mxDestroyArray(w1);
mxDestroyArray(ri1);
if(*cr1get<0.10)
for(int i=0;i<ArrayNumber;i++)
MatrixScore[i]=MainScoreTemp[i];
else ShowMessage("判断矩阵应做适当修改!");
}
其中memcpy((char*)mxGetPr(ri1),(char*)ri,1*sizeof(float));
是否正确呢?