procedure TForm1.hmary(var mary1,mary2:array of string);
var
mary:array of string;
i:Integer;
begin
SetLength(mary,High(mary1));
for I := 0 to high(mary1)-1 do
begin
mary[i]:=mary1[i];
mary1[i]:=mary2[i];
mary2[i]:=mary[i];
end;
end;
互換程序
uj5u.com熱心網友回復:
改正: for I := 0 to high(mary1) do
hight(mary1)不應該減1
uj5u.com熱心網友回復:
注意Delphi是4GL,它的智能程度是很高的,同一型別的陣列可以直接賦值,編譯器生成代碼處理元素復制的問題(也可能只是指標的復制,如果是動態陣列的話),不需要用戶操心。
注意:
type
TByteArray10 = array[0..9] of byte;
var
a1, a2, a3: array[0..9] of byte; // 這是同一型別
a4: array[0..9] of byte; //
a5: array[0..9] of byte; //
a6: array[0..9] of byte; // 不是同一型別,但是可以用TByteArray10進行cast
procedure Swap(var x, y:array of integer);
var
tmp:array of integer;
begin
TArrInt(tmp):=TArrInt(x);
TArrInt(x):=TArrInt(y);
TArrInt(y):=TArrInt(tmp);
uj5u.com熱心網友回復:
不能處理傳入的引數
uj5u.com熱心網友回復:
procedure Swap( x, y:array of integer);
type
TByteArray10 = array of integer;
var
a1, a2, a3: array of integer; // 這是同一型別
a4: array of integer; //
a5: array of integer; //
a6: array of integer; // 不是同一型別,但是可以用TByteArray10進行cast
begin
//可以這樣直接賦值交換:
a3 := a1;
a1 := a2;
a2 := a3;
TByteArray10(a6) := TByteArray10(a4);
TByteArray10(a4) := TByteArray10(a5);
TByteArray10(x) := TByteArray10(a6); //這句編譯時報錯 : Invalid typecast
end;
uj5u.com熱心網友回復:
procedure Swap(var x, y:array of integer);這個宣告的x、y的型別不是動態陣列,而是open array parameter,這種型別的引數兼容靜態陣列、動態陣列、以[]臨時構造的陣列,所以x,y的實際型別未必一樣。
這樣就可以了:
type
TArrInt=array of integer;
procedure Swap(var x, y: TArrInt);
var
z: TArrInt;
begin
z := x;
x := y;
y := z;
end;
uj5u.com熱心網友回復:
為何
這樣就能編譯
procedure TForm1.btn4Click(Sender: TObject);
type
TByteArray = array of byte;
var
a1: array of byte;
a2: array of byte;
a3: array of byte; // a1,a2,a3不是同一型別,但是可以用TByteArray10進行cast
begin
TByteArray(a3) := TByteArray(a1);
TByteArray(a1) := TByteArray(a2);
TByteArray(a2) := TByteArray(a3);
end
而這樣就不能編譯
procedure Swap2( x, y:array of integer);
type
TIntegerArr = array of integer;
var
tmp : array of integer;
begin
TIntegerArr(tmp):=TIntegerArr(x);
TIntegerArr(x):=TIntegerArr(y);
TIntegerArr(y):=TIntegerArr(tmp);
end;
uj5u.com熱心網友回復:
前面說過了,函式引數中的x, y:array of integer這個宣告的x、y的型別不是動態陣列,而是open array parameter,雖然形式上看起來象是動態陣列(實際上你給它傳一個靜態陣列實參進去也可以的,或者用[]構造一個臨時陣列也可以)。
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......