喫茶XRAYトップページ

[スレッド全体
]

[9933] Re2:今更きけない 動的配列…(いや、まぁ聞くんだけどさ)返信 削除
2016/5/16 (月) 12:51:38 Mr.XRAY
> あっ,これ,面白い !

興味ある方用に,テスト用のプロジェクトを UP しました.
自分で実際に確認するのが一番です.ハイ.
Delphi は GUI のアプリ開発用ですので,コンソールじゃないです.

mrxray.on.coocan.jp/Delphi/zip/DynamicArrayTest_Integer.zip
(544 KB)


[9934] Re3:今更きけない 動的配列…(いや、まぁ聞くんだけどさ)返信 削除
2016/5/16 (月) 13:15:30 Mr.XRAY
> 興味ある方用に,テスト用のプロジェクトを UP しました.
> 自分で実際に確認するのが一番です.ハイ.
> Delphi は GUI のアプリ開発用ですので,コンソールじゃないです.
>
> mrxray.on.coocan.jp/Delphi/zip/DynamicArrayTest_Integer.zip
> (544 KB)


てなわけで,元の Integer の配列を独立させるためには,
動的な配列なので,領域を確保する必要があります.
添付のコードを以下のようにしてみてください.
元のコードは,コーディング通りの動作をしていることになります.

  Memo1.Lines.Clear;

  // array1の確保と変更
  SetLength(Array1, DefaultLength);
  SetLength(Array2, DefaultLength);
  for i := Low(Array1) to High(Array1) do
    Array1[i] := i;
  // array1 を array2 にコピーではなくて
  // (配列を示すアドレス-ポインタ - を同じにするのではなく)
  // arrayy1の値を array2に代入
  for i := Low(Array1) to High(Array1) do begin
    Array2[i] := Array1[i];
  end;

もっとも,

> Delphi/動的配列の罠
> http://tobysoft.net/wiki/index.php?Delphi%2F%C6%B0%C5%AA%C7%DB%CE%F3%A4%CE%E6%AB


が,何を狙ったのかは,よく分かりませんが (^^;
別に「罠」でも何でもないと思いますが...


[9936] Re4:今更きけない 動的配列…(いや、まぁ聞くんだけどさ)返信 削除
2016/5/16 (月) 13:28:08 Mr.XRAY
> 別に「罠」でも何でもないと思いますが...

これが「罠」だったら,コンポーネントやクラスのインスタンスの代入は
全て「罠」になっちゃいます.


[9937] Re5:今更きけない 動的配列…(いや、まぁ聞くんだけどさ)返信 削除
2016/5/16 (月) 13:41:57 Mr.XRAY
> 全て「罠」になっちゃいます.

この「罠」を利用すると,以下のようなことができます.
先のサンプルの Array2 := Array1 と同じです.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  LSG : TStringGrid;
begin
  // LSGのインスタンスは生成していないが
  // StringGrid1のインスタンスを代入している
  // LSGとStringGrid1は同じになる(同じメモリアドレスを示す)
  LSG := StringGrid1;

  if ACol = 2 then begin
    LSG.Canvas.Brush.Style := bsSolid;
    LSG.Canvas.Brush.Color := RGB(0, 150, 0);
    LSG.Canvas.FillRect(Rect);
  end;
end;


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82