声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1301|回复: 5

[编程技巧] 关于结构体作为函数变量

[复制链接]
发表于 2009-4-9 15:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请问怎么把结构作为一个函数的变量
例如:
a.x=1;
a.f=[];
现要将a.x的值通过某个函数后的值赋给a.f
请问怎么实现
a.f=function(a.x)
这种方式我已经试过了,对于单个的结构体a是可以的
但是当a为一个1*n的结构体数组时,就不行了
求高手指点!!!
回复
分享到:

使用道具 举报

发表于 2009-4-9 16:10 | 显示全部楼层
可以的话, 请具体些!
出错代码和出错提示?
 楼主| 发表于 2009-4-9 16:26 | 显示全部楼层

没有出现任何提示或警告。
只是在这个函数运行结束后,函数值并没有赋给a.f,其值仍然为空,
 楼主| 发表于 2009-4-9 16:46 | 显示全部楼层
不好意思,刚才我没有说清楚,那个是另一情况,我现在详细的说一下
比如函数是:
function v=Squ(p)
c=length(p);
for i=1:c
    v(i)=p(i)*p(i);
end
现在
定义a为
>> a(1).x=1; a(2).x=2; a(2).f=[]; a(2).f=[];
这时调用函数
a.f=Squ(a.x);
的话就会出现
??? Error using ==> Squ
Too many input arguments.
之后,我把a.x写成[a.x]作为一个数组
这样的话
函数就是
[a.f]=Squ([a.x]);
这样的话就出现了下面的错误
??? Error using ==> Squ
Too many output arguments.

上述就是具体的情况了

[ 本帖最后由 ChaChing 于 2009-4-9 22:11 编辑 ]
发表于 2009-4-9 23:03 | 显示全部楼层
没如此用过! 但从错误讯息看好像varargin/varargout不支援结构class!
好奇, 为何一定要用struct class?
待高人确认!
发表于 2009-4-30 13:56 | 显示全部楼层

回复 地板 qingta123 的帖子

早上看了下Structures的帮助文献, 以前没细看!
varargin/varargout是支援Structures的, 但a.x并非Structures
试试下面方式, 方式可能很多!
function v=Squ(p)
c=length(p); for i=1:c, v(i)=p(i)*p(i); end
>> a(1).x=1; a(2).x=2; a(2).f=[]; a(2).f=[]; zz=Squ([a.x]);
>> aa=struct('g',num2cell(zz)); [a.f]=deal(aa.g);

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-28 02:52 , Processed in 0.063268 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表