#include <array.au3>Dim $a[10]=[1,2,3,4,5,6,7,8,9,10]$a=_sort($a)_ArrayDisplay($a)Func _sort($array) $t="End" For $i = 1 to UBound($array)-1 If $array[$i] > $array[$i-1] Then $t=$array[$i-1] $array[$i-1]=$array[$i] $array[$i]=$t EndIf Next If $t="End" Then Return($array) EndIf _sort($array)EndFunc
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
利用调试方法,把$a=_sort($a)后的_ArrayDisplay($a)这句修改为:
If IsArray($a) Then _ArrayDisplay($a) Else MsgBox( 0 , "" ,$a) EndIf |
可以看到返回后的$a不是数组,弹出的对话框显示值为0,这说明_sort函数不能将数组正确返回。
这是因为函数默认是传值而不是传址,传值即意味着传入的变量不能被修改。传值方式下,数组$array只是$a的一个拷贝,$array在函数的地址空间内,函数返回此空间就释放了,原$a的值不受影响。
修改建议就是,使用ByRef改为传址方式。传址方式下,$array直接指向$a的地址空间,这样允许传入的变量被函数直接修改。函数直接return即可,无需返回任何值。
# include <array.au3> Local $a[ 10 ] = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] _sort($a) _ArrayDisplay($a) Func _sort(ByRef $array) $t = "End" For $i = 1 To UBound($array) - 1 If $array[$i] > $array[$i - 1 ] Then $t = $array[$i - 1 ] $array[$i - 1 ] = $array[$i] $array[$i] = $t EndIf Next If $t == "End" Then Return _sort($array) EndFunc ;==>_sort |
添加回答
举报
0/150
提交
取消