当传递给一个函数结构是怎么处理的?
4视图(30天)
显示旧的评论
你好,我的一个问题是如何处理结构时使用作为函数的输入参数。我知道写“复制”,即矩阵是通过引用,除非他们被修改,因此被复制。然而,我得到的印象结构实际使用指针或引用的数据字段,这使得结构不同于矩阵。这就是为什么我想知道,当我使用的写“复制”结构输入参数吗?
例子:1:矩阵)
函数= fun2(中)
=在;%返回引用
2:矩阵)
函数= fun2(中)
(2、5)= 4;% Matlab创建一个副本
=在;
3:结构,这里发生了什么?)
函数= fun3(中)
在。基坑=兰德(3);%这里发生了什么?
=在;
接受的答案
罗伯特·卡明
2014年12月17日
我理解当你在结构中存储数据存储两件事
1。的矩阵/变量
2。的地址的内存/结构链接(即。基坑为例)
所以当你改变一个领域- >字段变化- >即您创建一个新的变量和内存地址的变化。看下面这个例子:
clc
清晰的
内存
一个。一个= 0 (10000、10000);
一个。2 = 0 (10000、10000);
b =一个;
流(2" b = = - >共享相同的内存\ n”);
内存
流(2' \ n现在改变一个行业只有在b \ n”);
b。两个= 1 (10000、10000);
谁
内存
当两个字段
一个
创建了我们使用吗
1.6 gb
(来自谁的变量的大小和内存被证实了matlab(从内存)。
从谁
b
也占用了
1.6 gb
- >,但我们知道他们是相同的物理内存位置由于文案写——正如你所说。
现在,当我们改变
一个
的字段
b
我们可以检查内存使用量的增加(在上面的例子中
~ .8GB
),我们看到,内存使用总量增加的新的单字段
b
(再一次的
~ .8GB
)。
从这我们可以summise的例子
基坑
在
出
将创建新的(和占用内存)但任何其他字段保留相同的内存位置作为输入变量
在
。