GUST NOTCH? DIARY

配列の挙動について

今更ながら配列と関数の関係について確認している。

グローバルで宣言された配列はC言語でのポインタのように扱える。関数に配列を渡し、関数内で操作をすることができる。以下はALLOCのようなものの例。

関数定義時の引数の は省略できるようだ。逆に呼び出す側はつけてはいけない。COPY はコピー先の配列を自動的に拡張してくれる。ただし、縮小はしないので、一度拡張された配列は COPY では縮小できない。(できたら困る)。
縮小させたい場合はPOPを使うとよいようだ。速度の問題はさておきBASICらしくREDIMを作るとするとこんな感じになる。指定した SIZE の方が大きい場合、増えた分には 0 が入る。逆に小さい場合は値が入っていても削除される。

サイズの変更だけでなく、もちろん内容の変更も可能。SORT 命令があるけど、自分でバブルソート的なものを書いてみるとこんな感じ。

COPY で DATA を代入できるというのは楽でいいし面白い。ただし、DATA列からのCOPYでは配列要素は拡張してくれないみたいだ。
ついでに内蔵の SORT は複数の配列を同時にソートできる。構造体的に扱いたい時には重宝しそうだ。

(2014-12-30追記)
よく考えたら、PRINT_ARRAY は数値配列を前提としているのに文字列配列を渡しても期待する挙動をしていた。
もしかして、と思ったら、結局ポインタっぽいというのは正解で、SWAPなどで配列の交換も可能。しかも数値配列と文字列配列の入れ替えが可能だった。だが、添え字はそのままなのでややこしくなる。