QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 913|回复: 0
打印 上一主题 下一主题

在MATLAB中传递变量:按值传递机制

[复制链接]
字体大小: 正常 放大
回帖奖励 1 点体力 回复本帖可获得 1 点体力奖励! 每人限 1 次

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-9-16 22:28 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在MATLAB中传递变量:按值传递机制
    maltab程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,MATLAB将会复制实参生成一个副本,然后把它们传递给函数。这次复制是非常重要的,因为它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。这个特性防止了因函数修改变量而导致的意想不到的严重错误。
    这一特性将在下面的函数中得到说明。这个函数中有两个输入参数:a和b。在它的计算中,它修改了变量的值:
    function out = sample(a, b)
    fprintf('In Sample: a = %f, b = %f %f\n',a,b);
    a = b(1) + 2*a;
    b = a .* b;
    out = a + b(1);
    fprintf('In Sample: a = %f, b = %f %f \n',a,b);

    下面是调用这个函数的检测程序:
    a = 2; b = [6 4];
    fprintf('Before sample: a = %f, b = %f %f\n', a,b);
    out = sample(a, b);
    fprintf('After sample: a = %f, b = %f %f\n',a,b);
    fprintf('After sample: out = %f \n', out);

    当这个程序被执行将产生如下的结果:
    >> test_sample
    Before sample: a = 2.000000, b = 6.000000 4.000000
    In Sample: a = 2.000000, b = 6.000000 4.000000
    In Sample: a = 10.000000, b = 60.000000 40.000000
    After sample: a = 2.000000, b = 6.000000 4.000000
    After sample: out = 70.000000

    注意,a和b在函数sample内都改变了,但这些改变对调用函数中的值并没有任何的影响。
    C语言的使用者对按值传递机制比较熟悉,因为C应用它把标量值传递给函数。尽管C语言不能用按值传递机制传递数组,所以对在C语言函数中的形参数组进行意想不到的修改将会导致在调用程序时产生错误。
    MATLAB改进了按值传递机制,既适于标量,又适应于数组(在MATLAB中参数传递过程中的执行要远比上面讨论中指出的要复杂的多。正如上面指出的,与按值传递相联系的复制将花去大量的时间,但是保护程序以至于不产生错误。实际上,MATLAB用了两种方法,它先对函数的每一个参数进行分析,确定函数的那些参数进行了修改。如果函数没有修改这个参数,它将不会对此参数进行复制,而是简单地指向程序外面的外面的变量,如果函数修改了这个参数,那么这个复制就会被执行)。




    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-21 08:32 , Processed in 0.709210 second(s), 55 queries .

    回顶部