這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何進(jìn)行數(shù)組類型與數(shù)組指針的巧妙利用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。成都創(chuàng)新互聯(lián)堅持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因為“專注所以專業(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供網(wǎng)站設(shè)計制作、做網(wǎng)站、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),微信小程序定制開發(fā),軟件定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
下面通過存取結(jié)構(gòu), 慢慢引入了數(shù)組類型與指針的一些使用方法; 其中六個小例子的測試內(nèi)容和結(jié)果都是一樣的.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type {先定義結(jié)構(gòu)和結(jié)構(gòu)指針}
PMyRec = ^TMyRec;
TMyRec = record
F1: Char;
F2: Word;
end;
{用靜態(tài)數(shù)組儲存或讀寫結(jié)構(gòu)很方便}
procedure TForm1.Button1Click(Sender: TObject);
var
ArrRec: array[0..2] of TMyRec;
i: Integer;
begin
{寫入}
for i := 0 to 2 do
begin
ArrRec[i].F1 := Chr(i+65);
ArrRec[i].F2 := (i+1) * 10;
end;
{讀取}
for i := 0 to Length(ArrRec) - 1 do
ShowMessageFmt('%s, %d', [ArrRec[i].F1, ArrRec[i].F2]);
end;
{這個只是定義了一塊內(nèi)存, 沒用數(shù)組的概念, 有點(diǎn)麻煩}
procedure TForm1.Button2Click(Sender: TObject);
var
buf: PMyRec;
begin
GetMem(buf, SizeOf(TMyRec) * 3); {申請內(nèi)存}
{寫入}
buf^.F1 := 'A';
buf^.F2 := 10;
Inc(buf); {到下一個}
buf^.F1 := 'B';
buf^.F2 := 20;
Inc(buf);
buf^.F1 := 'C';
buf^.F2 := 30;
Dec(buf, 2); {回到開始}
{讀取}
ShowMessageFmt('%s, %d', [buf^.F1, buf^.F2]);
Inc(buf); {到下一個}
ShowMessageFmt('%s, %d', [buf^.F1, buf^.F2]);
Inc(buf);
ShowMessageFmt('%s, %d', [buf^.F1, buf^.F2]);
Dec(buf, 2); {回到開始}
FreeMem(buf); {釋放內(nèi)存}
end;
{可以給結(jié)構(gòu)定義一個數(shù)組類型}
procedure TForm1.Button3Click(Sender: TObject);
type
TArr = array of TMyRec;
var
buf: PMyRec;
i: Integer;
begin
GetMem(buf, SizeOf(TMyRec) * 3);
for i := 0 to 2 do
begin
TArr(buf)[i].F1 := Chr(i+65);
TArr(buf)[i].F2 := (i+1) * 10;
end;
for i := 0 to 2 do
ShowMessageFmt('%s, %d', [TArr(buf)[i].F1, TArr(buf)[i].F2]);
FreeMem(buf);
end;
{直接用動態(tài)數(shù)組也行}
procedure TForm1.Button4Click(Sender: TObject);
var
Arr: array of TMyRec;
i: Integer;
begin
SetLength(Arr, 3);
for i := 0 to 2 do
begin
Arr[i].F1 := Chr(i+65);
Arr[i].F2 := (i+1) * 10;
end;
for i := 0 to 2 do
ShowMessageFmt('%s, %d', [Arr[i].F1, Arr[i].F2]);
end;
{使用一個元素的數(shù)組指針, 這是很常用的}
procedure TForm1.Button5Click(Sender: TObject);
type
PArr = ^TArr;
TArr = array[0..0] of TMyRec;
var
buf: PArr;
i: Integer;
begin
GetMem(buf, SizeOf(TMyRec) * 3);
for i := 0 to 2 do
begin
buf^[i].F1 := Chr(i+65);
buf^[i].F2 := (i+1) * 10;
end;
{用這種方法不能像下面這樣讀寫, 也就是 [] 中不能是超過 0 的常數(shù), 但可以用變量}
{這也容易理解, 因為常量會直接編譯到代碼中, 在沒有分配內(nèi)存以前, 編譯器不知道數(shù)組會更大}
{要解決這個問題需要用下一個方法}
// buf[0].F1 := 'A';
// buf[0].F2 := 10;
// buf[1].F1 := 'B';
// buf[1].F2 := 20;
// buf[2].F1 := 'C';
// buf[2].F2 := 30;
for i := 0 to 2 do
ShowMessageFmt('%s, %d', [buf[i].F1, buf[i].F2]);
FreeMem(buf);
end;
{使用一個超大的數(shù)組指針, Delphi 的 TList 類就是這么干的}
procedure TForm1.Button6Click(Sender: TObject);
type
PArr = ^TArr;
TArr = array[0..100000] of TMyRec; {不要擔(dān)心內(nèi)存暴漲, 使用時我們只用其指針}
var
buf: PArr;
i: Integer;
begin
GetMem(buf, SizeOf(TMyRec) * 3);
for i := 0 to 2 do
begin
buf^[i].F1 := Chr(i+65);
buf^[i].F2 := (i+1) * 10;
end;
{和上例不同的是, 下面的代碼也可以}
// buf[0].F1 := 'A';
// buf[0].F2 := 10;
// buf[1].F1 := 'B';
// buf[1].F2 := 20;
// buf[2].F1 := 'C';
// buf[2].F2 := 30;
for i := 0 to 2 do
ShowMessageFmt('%s, %d', [buf[i].F1, buf[i].F2]);
FreeMem(buf);
end;
end.
上述就是小編為大家分享的如何進(jìn)行數(shù)組類型與數(shù)組指針的巧妙利用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞標(biāo)題:如何進(jìn)行數(shù)組類型與數(shù)組指針的巧妙利用
網(wǎng)站URL:http://www.rwnh.cn/article30/gopspo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、定制開發(fā)、網(wǎng)站內(nèi)鏈、服務(wù)器托管、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)