名前 題名 ▼ takiさん > > これって > > procedure ABC(var buf:TTestAry); と同じですよね。 > > > > 『var』と書いていないのに var 扱いになる!! > > > > 関数(手続き)内で配列のサイズを指定してデータをセットする場合、 > 「Varなし」と「Varあり」とでは働きがちがうようです。 > > type > TTestAry = array of integer; > > // Varなし手続きの場合 > procedure ABC(buf:TTestAry); > begin > SetLength(buf,1); // 手続き内で配列のサイズを決定 > buf[0] := 999; > Form1.Label1.Caption := inttostr(buf[0]); // 999 > // 手続き内で値を変更する > buf[0] := 888; > end; > > procedure TForm1.Button1Click(Sender: TObject); > var > Abuf:TTestAry; > begin > // 手続きを呼び出す > ABC(Abuf); > Label2.Caption := inttostr(Abuf[0]); // Abuf は nil で、エラーになる > end; > > ///------------------------------------------- > > // Varあり手続きの場合 > procedure VarABC(var buf:TTestAry); > begin > SetLength(buf,1); // 手続き内で配列のサイズを決定 > buf[0] := 999; > Form1.Label1.Caption := inttostr(buf[0]); // 999 > // 手続き内で値を変更する > buf[0] := 888; > end; > > procedure TForm1.Button2Click(Sender: TObject); > var > Abuf:TTestAry; > begin > // 手続きを呼び出す > VarABC(Abuf); > Label2.Caption := inttostr(Abuf[0]); // 888 > end; > > えっ、もうややこしいこと言うなって? > > すみませんね。 > 私はこんな使い方しているもんで、それで気が付いたのでご報告を。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link