Как ни странно, я просто смотрел на это на днях. Лучшая информация, которую я нашел, была темы здесь и здесь , а также это .
По сути, это обычно считается очень плохой вещью в мире Matlab ... но в то же время ничто не останавливает вас, чтобы вы могли это сделать - попробуйте несколько простых примеров, и вы увидите, что изменения распространены. Просто внесите изменения в данные, полученные из prhs (вам не нужно ничего возвращать - поскольку вы изменили необработанные данные, они будут отражены в переменной в рабочей области).
Однако, как указано в ссылках, это может иметь странные последствия из-за семантики копирования при записи Matlabs. Настройка format debug
может очень помочь с интуицией. Если вы сделаете a=b
, то вы увидите, что a и b имеют разные «структурные адреса» или заголовки, представляющие тот факт, что они являются разными переменными, но указатель данных pr указывает на одну и ту же область в памяти. Обычно, если вы изменяете y в Matlab, происходит копирование при записи, и область данных копируется перед изменением, поэтому после y появляется новый указатель данных. Когда вы меняете вещи в mex, этого не происходит, поэтому, если вы изменили y, x также изменится.
Я думаю, что это нормально - это невероятно полезно, если вам нужно обрабатывать большие наборы данных, но вам нужно следить за любыми странностями - старайтесь убедиться, что вводимые вами данные не распределяются между переменными. Вещи становятся еще более сложными со структурой и массивами ячеек, поэтому я был бы более склонен избегать этого с ними.