1.值传递和地址传递
简单来说,值传递不会改变输入值,但是地址传递改变变量的值
变量传递例子:
pro add_li,a
a=a+10
print,'add_li value_a:'+string(13B),a
end
PRO test_li
l=bindgen(3,3)
print,'orginal value_l: '+string(13B),l
add_li,l
print,'result value_l:'+string(13B),l
END
结果:
IDL> test_li
% Compiled module: ADD_LI.
% Compiled module: TEST_LI.
orginal value_l:
0 1 2
3 4 5
6 7 8
add_li value_a:
10 11 12
13 14 15
16 17 18
result value_l:
10 11 12
13 14 15
16 17 18
IDL>
值传递例子:
pro add_li,a
a=a+10
print,'add_li value_a:'+string(13B),a
end
PRO test_li
l=bindgen(3,3)
print,'orginal value_l: '+string(13B),l
add_li,l[1:*,1:*]
print,'result value_l:'+string(13B),l
END
结果:
IDL> test_li
% Compiled module: ADD_LI.
% Compiled module: TEST_LI.
orginal value_l:
0 1 2
3 4 5
6 7 8
add_li value_a:
14 15
17 18
result value_l:
0 1 2
3 4 5
6 7 8
IDL>
2.参数传递的几种情况
1)简单传入参数
给出加参数的add.pro(A,B为参数)和作为主进程的MYPROCEDURE.pro
PRO ADD, A, B
PRINT, 'A = ', A
PRINT, 'B = ', B
A = A + B
PRINT, 'A = ', A
END
PRO MYPROCEDURE
X = 5
; Call the ADD procedure:
ADD, 3, X
END
运行MYPROCEDURE.pro的结果:
% Compiled module: ADD.
% Compiled module: MYPROCEDURE.
A = 3
B = 5
A = 8
IDL>
2) 传入参数可输入也可不输入的情况
当pro中有参数时可输入可不输入时,可以做如下处理:
n_params()检测所输入参数的个数
PRO test_li,a,b
a=a*10
if n_params() eq 2 then b=b*5
END
通过在end前打断点,分别看两次执行a,b的值,结果如下
IDL> .compile -v 'C:\Users\lizijia\Desktop\test_li.pro'
% Procedure was compiled while active: TEST_LI. Returning.
% Compiled module: TEST_LI.
IDL> test_li,2
% Breakpoint at: TEST_LI 4
C:\Users\lizijia\Desktop\test_li.pro
IDL> .continue
IDL> .compile -v 'C:\Users\lizijia\Desktop\test_li.pro'
% Compiled module: TEST_LI.
IDL> test_li,2,3
% Breakpoint at: TEST_LI 4
C:\Users\lizijia\Desktop\test_li.pro
IDL>
3) 传入参数+传出参数
pro中c为传出参数
pro add_li,a,b,c=c
c=a+b
print,'c 的值为: ',c
end
PRO test_li
l=1
z=2
add_li,l,z,c=j
print,'j 的值为: ',j
;if n_params() eq 3 then b=b*5
END
结果:
IDL> test_li
% Compiled module: ADD_LI.
% Compiled module: TEST_LI.
c 的值为: 3
j 的值为: 3
IDL>