Если у меня есть struct в Matlab с несколькими полями, определенными с одним и тем же объектом, будет ли он рассматриваться как один объект в памяти или воссоздан для каждого поля? Другими словами, я хотел бы иметь несколько имен полей для одного объекта, возможно ли это в Matlab?

Например,

function output = fn(input)

output = struct('field1',input,'field2',input)

end

Будет ли output содержать две копии input или одну?

0
Argyll 7 Апр 2014 в 04:47
Может быть, это может быть полезно: stackoverflow .com / questions / 14793453 /…
 – 
Rafael Monteiro
7 Апр 2014 в 05:36
Хороший. И спасибо. Что касается примеров в этом посте, одна переменная с плавающей запятой в любом случае обычно передается по значению. Matlab не стал исключением. Мне все еще нужно знать о struct.
 – 
Argyll
7 Апр 2014 в 06:03

1 ответ

Лучший ответ

Недавно я нашел способ найти ответ. В командную строку Matlab можно ввести следующее.

A=magic(3);
S=struct('field1',A,'field2',A);
format debug
S.field1
S.field2

Выход для меня был

>> S.field1

ans =


Structure address = 369610c0 
m = 3
n = 3
pr = 3fb54e40 
pi = 0
     8     1     6
     3     5     7
     4     9     2

>> S.field2

ans =


Structure address = 369610c0 
m = 3
n = 3
pr = 3fb54e40 
pi = 0
     8     1     6
     3     5     7
     4     9     2

Обратите внимание, что значения pr одинаковы для обоих полей.

Я думаю, что pr - это указатель на действительную часть матрицы. Таким образом, поскольку оба поля имеют один и тот же указатель, нет дублирования одного и того же объекта.

0
Argyll 21 Фев 2015 в 02:07