有趣的是,前几天我只是在看这个。我找到的最好的信息是这里和这里的线程以及这个。
基本上它在 Matlab 世界中通常被认为是一件非常糟糕的事情......但同时,没有什么能阻止你,所以你可以做到 - 尝试一些简单的例子,你会看到这些变化被传播了。只需更改您从 prhs 获得的数据(您不需要返回任何内容 - 因为您更改了原始数据,它将反映在工作区的变量中)。
然而,正如链接中指出的那样,由于 Matlabs 写时复制语义,这可能会产生奇怪的后果。设置format debug
对于获得直觉很有帮助。如果你这样做a=b
了,你会看到 a 和 b 有不同的“结构地址”或标题,表示它们是不同的变量,但数据指针 pr 指向内存中的同一区域。通常,如果您在 Matlab 中更改 y,写入时复制就会启动,并且数据区域在更改之前被复制,因此在 y 之后有一个新的数据指针。当您在 mex 中更改内容时,这不会发生,因此如果您更改了 y,x 也会更改。
我认为这样做是可以的——如果你需要处理大型数据集,它非常有用,但你需要留意任何奇怪的地方——尽量确保你输入的数据不会在变量之间共享。使用 struct 和 cell 数组,事情变得更加复杂,所以我更倾向于避免对它们这样做。