さて、初心者の方はメモリは特に意識していることは無いと思います。 でも、簡単なイメージを持っておくと、ゲームでもツールでもデータ管理をする場合 何かと役に立つと思います。
メモリ:名前の付いていない箱が並んだもの
変数:メモリの任意の箱に名前を付けたもの

となります。変数はメモリの任意の場所に作られます。これはコンピュータ(またはHSP) が勝手に名前の付いていない、空っぽの箱に名前を付けてくれるので考えなくていいでしょう。 配列変数(dim)は、これに番号が振られるだけです。
それでは、文字列変数(sdim)はどうでしょう?HELPを見れば分かりますが 文字数を指定するようになっています。この文字数というのが、メモリの箱一つに 対応します。sdimは文字数だけの箱を全部まとめて名前を付けてしまいます。 これも、並んだ部分で20個なら20個まとめます。一つおきとか、一個だけ 別な場所ということは有りません。

あれ?sdimはdimのように番号が振られないのにどうやって、変数に入れたり、中身を見たりするのだろう?

sdimで用意された変数は、それで一つと考えるの普通です。だから
	sdim a,20
としても、メモリのうち20個の箱を確保しても、通常はaを1個として考えます。
	sdim a,20,5
こうした場合は、20文字はいるaという変数が5個確保されるわけです。 もちろん、メモリでは、20×5=100個の箱が確保されています。
では、sdimで用意された変数の途中の部分に、値を取り出したり入れたりするにはどうするのでしょう。 それには、peek、strmidやpokeを使用します。
	sdim a,10
	a="abcdefg"

	peek b,a,0
	mes "b="+b

	b="" : strmid b,a,1,3
	mes "b="+b

	poke a,1,'B'
	mes a
	stop
sdimは一つと考えるように書きましたが、実際にはメモリの箱が有るので dimと同じように0番目から指定して、変数の途中で値を取り出したり入れたり出来ます。
peekは文字ではなく数字が出てきました。これは 文字と文字列の扱いを参考にしてください。

HSPでは、他にもメモリを意識する命令が有るので紹介します。
	a=10
	dup b,a
	b=0
	mes "a="+a
	stop
dup命令はHELPでクローンを作成する命令となっていますが、別々の物ではなく 全く同じ物で、箱の名前をもう一つ付ける物だと思っていいと思います。 (もちろん正確には違います(^^;) なぜこんな面倒な・・・となりますが、配列変数は特に無駄に長い名前になる上に 何のデータが入っているか分からなくなる場合が有ります。そういうときに この命令でわかりやすい名前にするのに使います。
	mref vram,66
	repeat winx*winy
		poke vram,cnt*3,cnt\128*2
		poke vram,cnt*3+1,cnt\128*2
		poke vram,cnt*3+2,0
	loop
	redraw 1
	stop
このmref命令はモジュール作成の際に使うのがほとんどなので普通は使わないと思います。
このサンプルでは、ウインドウ内画像データを直接書き換えています。 モジュール・サブルーチンを参考にしてください。
■ 目次へ戻る ■

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル