爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3418|回复: 0

[混合编程] IDL编程学习之参数传递

[复制链接]

新浪微博达人勋

发表于 2017-4-12 16:09:18 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
第一章 传递语法
IDL的函数经常是带参数的:
function,x,y
语句块
end
我长期没有发现的是,过程也是可以带参数的。
调用“过程”和“函数”时,参数传递的方式有2种:位置传递法,关键字传递法。
1.1位置传递
pro pro1,x1,x2,x3
语句块
end
调用时,pro1,1,2,3,就把1给了x1,2给了x2,3给了x3,之所以叫“位置传递”,就是因为参数是按顺序传递的,位置不可乱。
实例:
pro foreach_pro,x,y
print,x,y
print,n_params()
End
IDL> foreach_pro,'a',123
a     123
           2
注:n_params()用来获得已设置参数的个数(不包括关键字传递的参数,只看位置传递的参数)。
1.2关键字传递
实例:
pro foreach_pro,a,x1=x1,x2=x2,s=s
help,a,x1,x2,s
print,keyword_set(x2)
End
IDL> foreach_pro,'aaa',x1=36,/s
A               STRING    = 'aaa'
X1              INT       =       36
X2              UNDEFINED = <Undefined>
S               INT       =        1
       0
注:反斜杠相当于赋值1。keyword_set()用来检查某个参数是否已设置(返回01)
使用关键字传递,可以不按顺序。
【关键字继承】
实例:
pro foreach_pro,a,b,_extra=c
fig=plot(a,b,_extra=c)
End
foreach_pro,[3,2,1,0],[4,5,6,7],color='r',sym=24
图片1.png
这里_extra=c“color='r',sym=24继承传递给了plot命令。
第二章 值传递与地址传递
C语言中,如果使用指针进行运算,则是直接使用了物理地址,其值在计算中可能改变,而数组名也相当于一个指针,对数组名计算可能改变数组。
IDL中的地址传递相当于使用指针。
实例:
pro pro1,x
x=x*3
end
pro mainpro
;地址传递:
a=5
pro1,a
print,a
;值传递:
defsysv,'!b',100
pro1,!b
print,!b
;数组地址传递
c=findgen(4)
pro1,c
print,c
;数组值传递
pro1,c[0:-1]
print,c
End
输出:
      15
     100
     0.000000      3.00000      6.00000      9.00000
     0.000000      3.00000      6.00000      9.00000(注:经过地址传递,数组已经改变)
可见,使用变量名传递会改变物理地址的内容,使用c[0:-1]是值传递。
注意使用系统变量仅仅是传递值。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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