陣列拷貝,靜態陣列並非是指標

2021-09-10 05:29:59 字數 2409 閱讀 7934

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

tmyarray = array [0..5] of integer;

tform1 = class(tform)

btn1: tbutton;

btn2: tbutton;

btn3: tbutton;

procedure formcreate(sender: tobject);

procedure btn1click(sender: tobject);

procedure btn2click(sender: tobject);

procedure btn3click(sender: tobject);

private

fa1: array [0..5] of integer;

fa2: array of integer;

fb1: tmyarray;

fb2: tmyarray;

//procedure copyarray(asrc: array of integer; ades: array of integer); //無法拷貝

//procedure copymyarray(asrc: tmyarray; ades: tmyarray); //無法拷貝

//源陣列要宣告為const(安全), 目標陣列要宣告為out

//開放陣列是指數組元素個數不定的陣列,並非是變數型別,而是一種引數型別

procedure copyarray(const asrc: array of integer; out ades: array of integer); //1:開放陣列呼叫

procedure copymyarray(const asrc: tmyarray; out ades: tmyarray); //2:自定義型別呼叫

public

end;

var form1: tform1;

implementation

procedure tform1.copyarray(const asrc: array of integer; out ades: array of integer);

var size: integer;

begin

size := sizeof(ades);

copymemory(@ades, @asrc, size);

end;

procedure tform1.copymyarray(const asrc: tmyarray; out ades: tmyarray);

var size: integer;

begin

size := sizeof(ades);

copymemory(@ades, @asrc, size);

end;

procedure tform1.btn1click(sender: tobject);

begin

copyarray(fa1 , fa2);

caption := inttostr(fa2[5]);

end;

procedure tform1.btn2click(sender: tobject);

begin

copymyarray(fb1 , fb2);

caption := inttostr(fb2[5]);

end;

procedure tform1.btn3click(sender: tobject);

begin

if (@fa1) = (@fa1[0]) then //兩種方法都可以獲取資料的位址

showmessage(format('address is equal %d', [integer(@fa1)]));

end;

procedure tform1.formcreate(sender: tobject);

var i: integer;

begin

setlength(fa2, 6);

for i := 0 to length(fa1) - 1 do

begin

fa1[i] := i;

fb1[i] := i;

end;

end;

/// /// 1:陣列變數表示陣列本身,不是陣列的位址,這點和c語言差別很大。要獲取陣列位址用@farray 或者 @farray[0];

///

end.

什麼是陣列名?指標與陣列的區別!

陣列是指標的基礎,多數人就是從陣列的學習開始指標的旅程的。下面我節選一些在各種論壇和文章裡經常見到的關於陣列的文字 一維陣列是一級指標 二維陣列是二級指標 陣列名可以作為指標使用 陣列名就是.的常量指標 陣列名就是.的指標常量 這些文字看起來非常熟悉吧?類似的文字還有許多,或許你就是經常說這些話的人...

C 基礎之指標陣列和陣列指標(重點是後面的名詞)

之前一直分不清楚,現在能夠清晰的區別,來和大家分享 重點是後面的名詞 指標陣列 本質是個陣列 陣列裡的元素是指標 陣列指標 本質是個指標 指向陣列首位址的指標 目的照舊,知道了是個什麼東東,看一下怎麼用和分辨,先從分辨看 int p 10 指標陣列 分辨 找主體 p,主體左右看找優先順序高的先結合 ...

二維陣列名是指標的指標嗎?

我們知道一維陣列名是常量指標,我們可以將一維陣列名賦給乙個指標型別再對一維陣列進行相關的操作,那二維陣列名又是什麼?我們這樣初始化乙個二維陣列int a 3 3 或者為int a 3 3 從後面乙個定義我們可以看出二維陣列是由兩個一維陣列組成的也就是說二維陣列是 陣列的陣列 問題 了解了二維陣列那麼...