這是一個實例:編程
procedure TMainForm.Button1Click(Sender: TObject);
var
arr:array of array of string;
begin
setlength(arr,2,3);
arr[1,2]:='this is a test';
setlength(arr,0,0);
setlength(arr,4,5);
showmessage(arr[1,2]);數組
end;函數
聲明一個二維數組的方法是用 array of array of 類型 這很貼近人們的思惟方式。同理可推出三維數組的聲明方法爲 array of array of array of 類型this
對二維數組大小的調整仍然使用SetLength函數,第一個參數是數組名稱,第二個參數是最靠近數組名稱那個維度的大小,第三個參數是遠離數組名稱的維度的大小,以此類推。.net
在以上的例子中還有一個特別之處。就是聲明瞭一個大一點範圍的二維數組之後,若是對數組從新分配大小,而且這個新的大小是小於原來數組的,那麼,大的二維數組與小的二維數組之間相差的部分將會被清除(補充一句,若是這個數組的類型不是基本類型,比方說是這樣聲明的Can:array of TCanvas 數組類型爲TCanvas,那麼在這種狀況下不會自動調用析構函數,這樣就容易形成內存泄漏,因此在編程的時候必定要注意這種使用方法)。即使是立刻將數組大小調整回來甚至更大,都不能使這些數據回來。這個和Delphi中提供的TStringGrid控件不同。對TStringGrid的行列數量進行調整後,原來的數據都不會丟失,除非使用TStringGrid.Rows.Clear;orm
另外,Delphi中還容許設置非矩陣型的動態數組。如下是一個例子blog
procedure TMainForm.Button1Click(Sender: TObject);
var
arr:array of array of string;
begin
setlength(arr,10);
setlength(arr[2],5);
arr[2,4]:='this is a test';
showmessage(arr[2,4]);
showmessage(arr[3,1]);
end;內存
這裏面聲明瞭一個二維字符串數組arr,首先對這個數組的第一維度(按照習慣,稱之爲「列」)進行設置,大小爲10個。而後將這個數組的第三列(下標是2,但實際倒是第三列)的行數進行單獨設置,大小爲5個。這樣就構成了下圖這樣的矩陣字符串
N N X N N N N N N Nstring
N N X N N N N N N N
N N X N N N N N N N
N N X N N N N N N N
N N * N N N N N N N
(「X」 表明可用 「N」表明不可用 「*」表明arr[2,4]元素)
而後對arr[2,4]進行賦值「this is a test」。先要求顯示arr[2,4]的值,OK,徹底沒有問題,但到了arr[3,1]的時候卻報錯,緣由就是這個二維數組不是矩陣形式,除了第三列,其餘地方都是不存在的,儘管已經聲明瞭。————————————————版權聲明:本文爲CSDN博主「Jack_Chai」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/chaijunkun/article/details/5373597