Petitverse
ゲストさん (
ログイン
)
ログイン
コミュニティ内検索
コミュニティ一覧
Petitverse ご利用ガイド
Petitverse からのおしらせ
プチコン 非公式コミュニティ
プレイ日記
XOR
◆jrp9IErPrDPr
2023/5/3 21:15
txtA$="ABC"
txtB$=txtA$
FOR I=0 TO 2
txtA$[I]="X"
NEXT
PRINT txtB$
↑
これを実行すると「XXX」と表示されたのですが、
最初にtxtB$に"ABC"を代入した以降はtxtB$を書き換えていないのに
txtB$がtxtA$と同じように書き換わってしまっているのですが、これは仕様でしょうか?教えて欲しいです
コメント
こういち
2023/5/3 21:23
◆ou0jbJnEJ0Kb
はい。
参照と言います。
文字列は非常にサイズが大きい(1文字ごとに2バイトかな)ので、変数は文字列そのものではなく、文字列の場所(アドレスと言います)を持っています。
txtB$=txtA$
では文字列そのものをコピーするのではなく、アドレスを代入することになります。(つまりtxtB$とtxtA$の指し示す場所が同じになる)
参照を回避するにはCOPYという命令を使います。
あまさとしおん
2023/5/3 21:29
◆mzDKTVUAtwqE
なお面倒なときはtxtB$=””+txtA$
などと書く回避法もあります(右辺が変数1個だけだと参照になるから式にすればおkと考える)
こういち
2023/5/3 21:32
◆ou0jbJnEJ0Kb
なんならtxtB$=””+txtA$の方が望ましいかもですね。(COPYは少し罠がある)
XOR
2023/5/3 21:38
◆jrp9IErPrDPr
なるほど〜
教えて頂きありがとうございました
かつてこの仕様を理解していなかった所為でめっちゃゲーム制作に苦労したことがあったもので...
XOR
2023/5/3 21:43
◆jrp9IErPrDPr
「別の配列に元の文字列を1文字ずつ入れておく」とかいうかなり無理やりな手段を取ってました()
こういち
2023/5/3 21:52
◆ou0jbJnEJ0Kb
あぁ…ちなみに配列でも参照は起こります。(しかも実数配列,整数配列,文字列とか関係なしにtxt#=a%とか出来てしまう)
配列と文字列はわりと同じ扱いなので、一文字ずつ代入するのは内部ではCOPYと同じだったり。
コメントを書く
こちらは「プチコン3号」「プチコンBIG」など、
プチコンシリーズ
に関する話題を扱った
コミュニティです
プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
ユーザー登録なしで書き込みができます
秘密の合い言葉は成りすましの防止 (
トリップ機能
)、書き込みの編集時の本人認証に使用します
秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります
normal
happy
like
surprized
frustrated
puzzled
画像
ネタバレ
投稿する
-
WEB PATIO
-