#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 回答

呼喚遠(yuǎn)方
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
利用調(diào)試方法,把$a=_sort($a)后的_ArrayDisplay($a)這句修改為:
If IsArray($a) Then _ArrayDisplay($a) Else MsgBox( 0 , "" ,$a) EndIf |
可以看到返回后的$a不是數(shù)組,彈出的對(duì)話框顯示值為0,這說(shuō)明_sort函數(shù)不能將數(shù)組正確返回。
這是因?yàn)楹瘮?shù)默認(rèn)是傳值而不是傳址,傳值即意味著傳入的變量不能被修改。傳值方式下,數(shù)組$array只是$a的一個(gè)拷貝,$array在函數(shù)的地址空間內(nèi),函數(shù)返回此空間就釋放了,原$a的值不受影響。
修改建議就是,使用ByRef改為傳址方式。傳址方式下,$array直接指向$a的地址空間,這樣允許傳入的變量被函數(shù)直接修改。函數(shù)直接return即可,無(wú)需返回任何值。
# 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 |
添加回答
舉報(bào)
0/150
提交
取消