You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB MEX文件中mxArray* plhs[]与mxArray** plhs的区别问询

关于MEX函数参数mxArray *plhs[]与mxArray** plhs的区别

问题背景

日常使用C语言(非专家),熟悉MATLAB,仅少量使用过C++且已许久未用。近期首次接触MATLAB的MEX功能,学习官方基础示例时,发现入口函数mexFunction的参数写法此前未见过:

/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[],
                 int nrhs, const mxArray *prhs[])
{
/* variable declarations here */

/* code here */
}

原本以为输出、输入参数会是mxArray *plhs这类形式,也理解因需返回多种类型(如标量、矩阵等)可能需要指针的指针(即mxArray** plhs),但示例中使用的是mxArray *plhs[]。了解到该语法表示指针数组,想请教这两种写法是否存在区别?

解答

在C语言的函数参数列表里,这两种写法是完全等价的——编译器会自动把函数参数中的数组声明mxArray *plhs[]调整为指针的指针mxArray** plhs,它们在内存中的存储和访问方式没有任何区别。

不过两者在语义上有细微差异:

  • mxArray *plhs[]的写法更直观,它明确传达了一个信息:这是一个存储mxArray指针的数组,对应MATLAB里的多个输出变量,nlhs就是这个数组的有效长度。
  • mxArray** plhs是更抽象的“指针的指针”写法,功能上和前者完全一致,但从语法本身看不出“数组”的含义,需要结合上下文理解它指向的是一组指针。

在函数内部使用时,两种写法的操作完全相同:比如访问第一个输出变量的指针,既可以写plhs[0],也可以写*(plhs + 0),效果没有区别。MATLAB在调用MEX函数时,会预先分配好这个指针数组的空间,我们只需要给数组里的每个指针赋值(指向创建好的mxArray对象)即可。

内容的提问来源于stack exchange,提问作者Nukesub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:15:17