📄 4.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://sbbs.seu.edu.cn"><font face="黑体"><big><big>seu</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> 在matlab里面调用c (BM: luckzpz) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="mex.htm">回到开始</a>][<a href="mex.htm">上一层</a>][<a href="5.htm">下一篇</a>]
<hr><p align="left"><small>发信人: babylon (淡蓝的晚间), 信区: MathTools <br>
标 题: 用c编写mex程序[part 4]--dodoo(转载) <br>
发信站: 虎踞龙蟠BBS站 (2000年06月03日20:28:54 星期六), 转信 <br>
<br>
<br>
【 以下文字转载自 Radio 讨论区 】 <br>
【 原文由 babylon 所发表 】 <br>
输入数据是在函数调用之前已经在Matlab里申请了内存的,由于mex函数与Matlab共用同 <br>
一个地址空间,因而在prhs[]里传递指针就可以达到参数传递的目的。但是,输出参数 <br>
却需要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针 <br>
类型必须是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来实现内 <br>
存的申请,函数原型如下: <br>
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag) <br>
m:待申请矩阵的行数 <br>
n:待申请矩阵的列数 <br>
为矩阵申请内存后,得到的是mxArray类型的指针,就可以放在plhs[]里传递回去了。但 <br>
是对这个新矩阵的处理,却要在函数内完成,这时就需要用到前面介绍的mxGetPr。使用 <br>
mxGetPr获得指向这个矩阵中数据区的指针(double类型)后,就可以对这个矩阵进行各 <br>
种操作和运算了。下面的程序是在上面的show.c的基础上稍作改变得到的,功能是将输 <br>
<br>
//reverse.c 1.0 <br>
<br>
<br>
<br>
#include "mex.h" <br>
<br>
void mexFunction(int nlhs, mxArray *plhs[], <br>
<br>
int nrhs, const mxArray *prhs[]) <br>
<br>
{ <br>
<br>
double *inData; <br>
<br>
double *outData; <br>
<br>
int M,N; <br>
<br>
int i,j; <br>
<br>
<br>
<br>
inData=mxGetPr(prhs[0]); <br>
<br>
M=mxGetM(prhs[0]); <br>
<br>
<br>
N=mxGetN(prhs[0]); <br>
<br>
<br>
plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL); <br>
<br>
outData=mxGetPr(plhs[0]); <br>
<br>
<br>
for(i=0;i<M;i++) <br>
<br>
for(j=0;j<N;j++) <br>
<br>
outData[j*M+i]=inData[(N-1-j)*M+i]; <br>
<br>
} <br>
<br>
<br>
当然,Matlab里使用到的并不是只有double类型这一种矩阵,还有字符串类型、稀疏矩 <br>
阵、结构类型矩阵等等,并提供了相应的处理函数。本文用到编制mex程序中最经常遇到 <br>
的一些函数,其余的详细情况清参考Apiref.pdf。 <br>
<br>
<br>
<br>
-- <br>
DEADorALIVE <br>
<br>
※ 来源:.虎踞龙盘东南站 sbbs.seu.edu.cn.[FROM: 202.119.22.71] <br>
-- <br>
※ 转载:.虎踞龙蟠BBS站 sbbs.seu.edu.cn.[FROM: 202.119.22.102] <br>
</small><hr>
<p align="center">[<a href="mex.htm">回到开始</a>][<a href="mex.htm">上一层</a>][<a href="5.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -