日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

静,动态数组总结

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 静,动态数组总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自萬一老師的博客

原文出處: http://www.cnblogs.com/del/category/114641.html



靜態數組的定義方法:
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//1.
標準方法:
var
? MyArr: array[0..10] of Integer;? //
定義靜態數組
--------------------------------------------------------------------------------

//2.
可以使用非0下標:
var
? MyArr: array[9..10] of Integer;? //
不能提倡,這樣不容易與系統函數溝通
--------------------------------------------------------------------------------

//3.
根據預定義類型來聲明數組:
type
? TMyArr = array[0..10] of Integer;? //
先定義一個數組類型
var
? MyArr: TMyArr;? //
再定義靜態數組
--------------------------------------------------------------------------------

//4.
在非過程區可以直接賦值:
var
? MyArr: array[0..2] of Integer = (11,22,33);
--------------------------------------------------------------------------------

//5.
多維數組:
var
? MyArr: array[0..2, 0..2] of Integer;
begin
? //
使用
? MyArr[1,2] := 100;
end;
--------------------------------------------------------------------------------

//6.
根據子界定義數組:
type
? TRange = 0..10;
var
? MyArr: array[TRange] of Integer;
--------------------------------------------------------------------------------

//7.
根據枚舉定義數組:
type
? TEnums = (Enum1,Enum2,Enum3);
var
? MyArr: array[TEnums] of?string;
begin
? MyArr[Enum1] := '
萬一';
? ShowMessage(MyArr[Enum1]);? //
萬一
end;
--------------------------------------------------------------------------------

//8.
根據其他類型定義數組:
var
? MyArr: array[Byte] of Char;
begin
? MyArr[255] := #65;
? ShowMessage(MyArr[255]);? //A
end;

//
應盡量不使用內建類型,可以新建類型:
type
? TNewByte = Byte;
var
? MyArr: array[TNewByte] of Char;
begin
? MyArr[255] := #65;
? ShowMessage(MyArr[255]);? //A
end;

//
也可以使用類型別名:
type
? TChar = type Char;
var
? MyArr: array[TChar] of Byte;
begin
? MyArr['C'] := 255;
? ShowMessage(IntToStr(MyArr['C']));? //255
end;

//
同時定義類型:
type
? MyRec = record
??? s: string;
??? r: Real;
??? b: Byte;
? end;
var
? Arr1: array[0..100] of MyRec;
? Arr2: array[0..100] of?record s: string; r: Real; b: Byte; end;? //
可以直接這樣定義
? Arr3: packed?array[0..100] of MyRec;? //
壓縮數組定義, 好像沒有區別?
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



動態數組的使用:
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//
1:
var
? StrArr: array?of String;? //
動態數組定義時不與維數
begin
? SetLength(StrArr,6);? //
分配6個元素位置: 0-5
? StrArr[0] := '
萬一';? //動態數組的下界是 0
? ShowMessage(StrArr[0]);? //
分配空間后和靜態數組一樣使用
? StrArr := nil;??????? //
一般沒必要手動釋放, 動態數組離開作用域會自釋放
end;
-------------------------------------------------------------------------------

//
給動態數組添加一個元素
type
? TOneArray = array?of Integer;

procedure AddArrayItem(Arr: TOneArray; x: Integer);
begin
? SetLength(Arr,Length(Arr)+1);
? Arr[High(Arr)] := x;
end;
--------------------------------------------------------------------------------

//
2. 動態數組的引用:
var
? Arr1,Arr2: array?of Integer;
? a: array[0..1] of Integer;
begin
? SetLength(Arr1,6);
? Arr1[5] := 100;

? Arr2 := Arr1;? //Arr2
引用了 Arr1
? ShowMessage(IntToStr(Arr2[5]));? //100
? ShowMessage(IntToStr(Length(Arr2)));? //
當然 Arr2 維數也會是 6

? ShowMessage(IntToStr(SizeOf(Arr1)));? //4,
其實動態數組是個指針
? ShowMessage(IntToStr(SizeOf(Arr2)));? //4

? Arr2[5] := 99;?????????????????? //
現在它們指向同一個數組, 改變這個就是改變那個
? ShowMessage(IntToStr(Arr1[5]));? //99

? Arr1 := nil;???????????????????? //
釋放其中一個指針, 數組繼續存在
? ShowMessage(IntToStr(Arr2[5]));? //99
end;
--------------------------------------------------------------------------------

//
3. 數組 Copy &lt1>:
var
? Arr1,Arr2: array?of Integer;
begin
? SetLength(Arr1,6);
? Arr1[5] := 100;

? Arr2 := Copy(Arr1);? //
數組 Copy
? Arr2[5] := 99;? //
改變 Arr2 不再影響 Arr1
? ShowMessage(IntToStr(Arr1[5]-Arr2[5]));? //1

? SetLength(Arr1,7);
? ShowMessage(IntToStr(Length(Arr1)));? //7
? ShowMessage(IntToStr(Length(Arr2)));? //6,
沒有一點牽扯了
end;
--------------------------------------------------------------------------------

//
4. 數組 Copy &lt2>:
var
? Arr1,Arr2: array?of Integer;
? i: Integer;
begin
? SetLength(Arr1,6);
? for i := Low(Arr1) to High(Arr1) do? //
給每個元素賦值
??? Arr1[i] := i+1;

? Arr2 := Copy(Arr1,1,3);? //
Copy 2..4個元素

? ShowMessage(IntToStr(Arr1[1]));? //2,
現在 Arr2[0] Arr1[1] 的值是一樣的
? ShowMessage(IntToStr(Arr2[0]));? //2

? ShowMessage(IntToStr(Length(Arr1)));? //6,
維數肯定不一樣了
? ShowMessage(IntToStr(Length(Arr2)));? //3
end;
--------------------------------------------------------------------------------

//
5. 動態多維數組:
var
? Arr: array?of?array?of Integer;? //
定義多維數組
begin
? SetLength(Arr,5,5);? //
分配空間
? Arr[0,3] := 100;???? //
賦值
? ShowMessage(IntToStr(Arr[0,3]));? //
取值
end;
--------------------------------------------------------------------------------

//
6. 另類建立:
var
? Arr: array?of Integer;
begin
? Arr := varArrayCreate([0,3],varInteger);
? ShowMessage(IntToStr(Length(Arr)));? //4

? Arr := VarArrayOf([1,2,3,4]);

? ShowMessage(IntToStr(Arr[0]));? //1
? {
這是給變體數組使用的,可能會有效率問題}
end;
--------------------------------------------------------------------------------

//
動態數組的釋放
//
動態數組一般是不需要手動釋放的, 如果需要...
var
? arr: array?of Integer;
begin
? {
設置動態數組維數}
? SetLength(arr,10);

? {
釋放方法一}
? arr := nil;

? {
釋放方法二}
? SetLength(arr, 0);

? {
釋放方法三}
? Finalize(arr);
end;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


變體數組:
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

var
? Arr: array[0..3] of Variant;
begin
? Arr[0] := 123;
? Arr[1] := 'wy';
? Arr[2] := True;
? Arr[3] := VarArrayOf([1,'wanyi',1.5]);? //
變體數組的元素也可以是變體數組

? ShowMessage(Arr[0]);? //123,
不需要轉換
? ShowMessage(Arr[1]);? //wy
? ShowMessage(Arr[2]);? //True
? ShowMessage(Arr[3][1]);? //wanyi
end;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



數組與枚舉:
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
type
? TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday); {
定義枚舉}
var
? weekArr: array[TMyEnum] of?string; {
定義數組}
? myEnum: TMyEnum;?????????????????? {
定義枚舉變量}
begin
? {
數組賦值}
? weekArr[Monday]??? := '
星期一';
? weekArr[Tuesday]?? := '
星期二';
? weekArr[Wednesday] := '
星期三';
? weekArr[Thursday]? := '
星期四';
? weekArr[Friday]??? := '
星期五';
? weekArr[Saturday]? := '
星期六';
? weekArr[Sunday]??? := '
星期天';

? {
調用數組}
? ShowMessage(weekArr[Sunday]); {
星期天}

? {
遍歷數組}
? for myEnum := Low(weekArr) to High(weekArr) do
? begin
??? ShowMessage(weekArr[myEnum]); {
將分別顯示: 星期一 ... 星期天}
? end;
end;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



數組與子界:
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
type
? TABC = 'A'..'G';??????????????? {
定義子界}
var
? abcArr: array[TABC] of Integer; {
定義數組}
? abc: TABC;????????????????????? {
定義子界變量}
begin
? {
數組賦值}
? abcArr['A'] := 11;
? abcArr['B'] := 22;
? abcArr['C'] := 33;
? abcArr['D'] := 44;
? abcArr['E'] := 55;
? abcArr['F'] := 66;
? abcArr['G'] := 77;

? {
調用數組}
? ShowMessage(IntToStr(abcArr['G'])); {77}

? {
遍歷數組}
? for abc := Low(abcArr) to High(abcArr) do
? begin
??? ShowMessage(IntToStr(abcArr[abc])); {11 22 33 44 55 66 77}
? end;
end;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>



數組竟然可以這樣定義:
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//
這是常規思路:
const
? arr: array[0..1] of Char = ('A','B');
begin
? ShowMessage(arr);?????????????????? {AB}
? ShowMessage(IntToStr(Length(arr))); {2}
end;
--------------------------------------------------------------------------------

//
沒想到可以這樣:
const
? arr: array[Boolean] of Char = ('A','B');
begin
? ShowMessage(arr);?????????????????? {AB}
? ShowMessage(IntToStr(Length(arr))); {2}

? {
訪問元素}
? ShowMessage(arr[False]);??????????? {A}
? ShowMessage(arr[True]);???????????? {B}

? {
也可以這樣訪問}
? ShowMessage(arr[Low(arr)]);???????? {A}
? ShowMessage(arr[High(arr)]);??????? {B}

? {
但不能這樣訪問}
//? ShowMessage(arr[0]);
//? ShowMessage(arr[1]);

? {
但可以變通一下}
? ShowMessage(arr[Boolean(0)]);?????? {A}
? ShowMessage(arr[Boolean(1)]);?????? {B}
end;
--------------------------------------------------------------------------------

//
同理, 這樣也可以:
const
? arr: array[Byte] of Integer = (
??? 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
??? 30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,
??? 56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,
??? 82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,
??? 106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
??? 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,
??? 146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,
??? 166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,
??? 186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,
??? 206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,
??? 226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,
??? 246,247,248,249,250,251,252,253,254,255,256);
begin
? ShowMessage(IntToStr(arr[Low(arr)]));? {1}
? ShowMessage(IntToStr(arr[High(arr)])); {256}
? ShowMessage(IntToStr(Length(arr)));??? {256}
end;
--------------------------------------------------------------------------------

//
給這種用法來一個必要性的實例:
const
? BoolStr: array[Boolean] of?string = ('False', 'True');
var
? b: Boolean;
begin
? b := True;
? ShowMessage(BoolStr[b]); {True}
? b := not b;
? ShowMessage(BoolStr[b]); {False}
end;

轉載于:https://www.cnblogs.com/w413133157/archive/2010/05/09/1730955.html

總結

以上是生活随笔為你收集整理的静,动态数组总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。