首先更正一下你的問題,兩種傳遞分別是按值傳遞和按引用傳遞,也就是說一種傳遞的是值(即一個常量),另一種傳遞的是變數本身(即變數在記憶體中的開始地址)。
例:
clear
stor 50 to x1,x2
set upfparms to value
do sub1 with x1,(x2) &&x1是引用傳遞,(x2)值傳遞
?x1,x2
x1=50
x2=50
sub1(x1,(x2)) &&x1和(x2)均是按值傳遞
set udfparms to reference
sub1(x1,(x2)) &&x1是引用傳遞,(x2)值傳遞
return
*sub1.prg
parameters a,b
a=a+5
b=b+2
原理如下:
1. 當使用括號將變數名括起來的時候,如(x2)的 ,它是個表示式,與x1+x2、3*x1的概念一樣,所以先計算值,然後傳遞這個值,所以肯定是值傳遞。
2. 當使用do sub1 with x1,(x2) 這種格式時,x1一定是按引用傳遞,不管set udfparms是value還是reference,即這種格式下預設是引用傳遞,不理udfparms的設定。
3. 當使用sub(x1,(x2))時,若set udfparms設定的是value,則x1是按值傳遞,若set udfparms設定的是reference,則x1是按引用傳遞。
4. 而(x2)總是值傳遞。
首先更正一下你的問題,兩種傳遞分別是按值傳遞和按引用傳遞,也就是說一種傳遞的是值(即一個常量),另一種傳遞的是變數本身(即變數在記憶體中的開始地址)。
例:
clear
stor 50 to x1,x2
set upfparms to value
do sub1 with x1,(x2) &&x1是引用傳遞,(x2)值傳遞
?x1,x2
x1=50
x2=50
sub1(x1,(x2)) &&x1和(x2)均是按值傳遞
?x1,x2
set udfparms to reference
do sub1 with x1,(x2) &&x1是引用傳遞,(x2)值傳遞
?x1,x2
x1=50
x2=50
sub1(x1,(x2)) &&x1是引用傳遞,(x2)值傳遞
?x1,x2
return
*sub1.prg
parameters a,b
a=a+5
b=b+2
return
原理如下:
1. 當使用括號將變數名括起來的時候,如(x2)的 ,它是個表示式,與x1+x2、3*x1的概念一樣,所以先計算值,然後傳遞這個值,所以肯定是值傳遞。
2. 當使用do sub1 with x1,(x2) 這種格式時,x1一定是按引用傳遞,不管set udfparms是value還是reference,即這種格式下預設是引用傳遞,不理udfparms的設定。
3. 當使用sub(x1,(x2))時,若set udfparms設定的是value,則x1是按值傳遞,若set udfparms設定的是reference,則x1是按引用傳遞。
4. 而(x2)總是值傳遞。