HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0118
白幻三次元配列の挙動に関する質問です4解決


白幻

リンク

2020/1/18(Sat) 15:48:53|NO.89275

某テ〇リスを一から製作しようとしたところです。
inst_mino,7,4,4<br>
inst_mino(4,0,0)=0,0,0,0
でエラー7(配列の要素が〜)が発生しました。

inst_minoは7,4,4の三次元配列で宣言したので、

inst_mino(4,0,0)=0,0,0,0

はinst_mino(4,0,0〜3)それぞれに0を代入するため 要素数のオーバーは起こさないと思うのですが… また、この状態でもひとつひとつ崩して書くと、なぜかエラーは発生しません。 inst_mino
(0〜3,0〜3,0)=0,0,0,0
は成功しています。代入する数値が0でなくても成功します。 誤字があるわけでもないのに、
inst_mino(4〜6,0〜3,0)=0,0,0,0
が成功しません。
なぜでしょうか…?



この記事に返信する


白幻

リンク

2020/1/18(Sat) 15:51:39|NO.89276

注釈
inst_mino(4〜6,0〜3,0)=0,0,0,0

というのは決して要素数にそのまま4〜6などと記入しているわけではなく、 単純に「4,5,6のどれでも」という意味です。わかりにくい表記で申し訳ありません…



沢渡

リンク

2020/1/18(Sat) 16:52:38|NO.89279


inst_mino(4,0,0)=0,0,0,0
これだと代入対象は、(4,0,0)と(5,0,0)と(6,0,0)と(7,0,0)になってしまいます。
配列の範囲をオーバーするのはこれが原因です。



白幻

リンク

2020/1/18(Sat) 19:45:47|NO.89281

なるほど…崩して書くかループ処理でどこかから読み出すしかない感じなんですね…
ありがとうございました。



kanahiron

リンク

2020/1/18(Sat) 22:30:36|NO.89282

HSPの多次元配列の指定はCなどと逆になります
dimの要素数の指定をひっくりかえせば一気に代入できますよ


screen 0 font msgothic, 10 dim inst_mino, 4, 4, 7 //7,4,4から逆にする inst_mino(0, 0, 0) = 1, 2, 3, 4 inst_mino(0, 0, 1) = 11, 22, 33, 44 inst_mino(0, 0, 6) = 66, 77, 88, 99 repeat length3(inst_mino) cnt3 = cnt repeat length(inst_mino) cnt1 = cnt mes strf("inst_mino(%d, %d, %d) = %d", cnt1, 0, cnt3, inst_mino(cnt1, 0, cnt3)) loop loop
次のように確保した要素数を超えてもちゃんと自動拡張されます

inst_mino(0, 0, 8) = 80, 81, 82, 83
1次元目の自動拡張はNGです

inst_mino(0, 0, 6) = 60, 61, 62, 63, 64 //4要素しか無いのに5つは入らない



ONION software Copyright 1997-2023(c) All rights reserved.