2つの値を交換するには、三角代入法を使う
a=b
b=c
c=a
というやつ。
これをmemcpyを使うことでより汎用的な仕様になる。


'a,bの値を交換する。sizeにはa,bの型のサイズ
Function swap(a As *Byte, b As *Byte, size As Long) As Long
Dim s1 As *Byte
s1 = malloc(size)
If s1 = NULL Then Exit Function
memcpy(s1, a , size)
memcpy(a , b , size)
memcpy(b , s1, size)
free(s1)
swap = 1
End Function


#N88BASIC

Dim s[100] As Byte, t[100] As Byte, c As Long
Dim i As Long, j As Long
Dim a As Double, b As Double

i = 444
j = 78956
a = -8.5
b = 98.7654

lstrcpy(s, "asdf")
lstrcpy(t, "qwer789")

Print MakeStr(s);"<->"; MakeStr(t), i;"<->";j, a;"<->";b,
swap(s, t, Len(s))
swap(VarPtr(i), VarPtr(j), SizeOf(Long))
swap(VarPtr(a), VarPtr(b), SizeOf(Double))
Print MakeStr(s);"<->";MakeStr(t), i;"<->";j, a;"<->";b,
2つの値を交換する別の方法として、こにょうな方法は速度が遅く、
大量のデータを扱うには不向き。
そこでポインタを差し替える方法もあるが、
いずれにせよ値を交換することの内容なアルゴリズムを採択したいものだ。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年10月31日 20:56