IDL的参数传递(五)

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> 
发布了39 篇原创文章 · 获赞 5 · 访问量 3056

猜你喜欢

转载自blog.csdn.net/weixin_43955546/article/details/105679229
今日推荐