DELPHI 陣列奇偶交換

2025-01-05 19:30:14 字數 5892 閱讀 6244

1樓:網友

做奇偶交換很簡單,但你要求程式中有那些**,就讓人匪夷所思了。

tel:array[1..12] of char; /這個是儲存字元的陣列。

tel[i]:=z'; 這個幹嘛用?

tel[i]:=; 這個在提取資料到陣列中時用到。

2樓:網友

額 procedure : tobject);

vari: integer;

arr:array[1..12] of char;

beginfillchar(arr,12,0);

for i :=1 to length( doif i mod 2 =0 then

if i-1 <>0 then

arr[i-1]:=

elseelse

if i + 1<=12 then

arr[i+1]:=

arr;end;但是沒有你說的那個**吶?

3樓:網友

嘗試過了,沒法子把上面的程式放進去,期待答案。。。

請問:delphi 中陣列作為函式的引數傳遞,這樣傳過去的是位址,怎樣把陣列作為值傳遞過去?

4樓:網友

在 delphi 中,引數的傳遞可分為值傳遞、var位址傳遞,以及 out(輸出)、const(常數)。

前兩者的區別,功能上的區別在於:

值傳遞過程中,對於引數的修改不影響源。

引用傳遞過程中,對於引數的修改,會直接修改源本身。

如果是以引用方式(即傳遞位址方式),前面需要新增關鍵字var

如:function na:intarray): integer;

問題描述中的**,實現的就是值傳遞而非位址傳遞方式。

5樓:網友

你這個是靜態陣列,本身就是值傳遞的。

6樓:網友

我測試發現,只要在函式定義中不使用var,這個陣列就是值傳遞啊,函式內部修改了也無效!!!親測。

delphi中陣列是如何用的?

7樓:陽光上的橋

定義乙個一維護陣列:

vari:integer;

a1: array [1..100] of integer;

這樣定義以後,就有a1[1]~a1[100]這樣的100個整型變數可以使用,當然陣列的元素也可以是其它的任何型別。

陣列的初始化一般使用迴圈語句,例如:

for i:=1 to 100 do a1[i]:=0;

定義二維陣列的語法例子:

vari,j:integer;

a2:array [1..10, 1..10] of integer;

這樣定義以後a2陣列的元素是二維的,比如a2[1,1]~a2[10,10],總共10*10=100個元素。

二維陣列的初始化和一維非常類似,例如:

for i:=1 to 10 do for j:=1 to 10 do a2[i,j]:=0;

delphi乙個陣列如何複製另乙個陣列?

8樓:網友

vara, b: array of integer;

beginsetlength(a, 2);

setlength(b, 2);

a[0]:= 1;

a[1]:= 2;

b:= copy(a); // 整個陣列都複製過去b:= copy(a, 0, 2); // 選擇性複製b[0]:= 2;

showmessagefmt('a0:%d,b0:%d', [a[0], b[0]])// a0:1,b0:2

end;

delphi 7 中陣列如何當引數

9樓:至少讓我看一眼

因為你在函式中傳遞的陣列的形參的型別的是tdigits。但是實參s卻不是tdigits而是array[1..8] of longint。

固然實參的宣告與形參就形式上來說是一致的(都是array[1..8] of longint)。但是在程式中tdigits與實參s的型別卻不能被認定為同種型別。

usessysutils;

typetdigits = array [1 ..8] of longint;

vara, k, t, i, j: longint; s: tdigits;

function findt(f: tdigits; a, n: longint): boolean;

vari: longint;

beginfor i := 1 to n do

beginif (f[i] = a) then

beginfindt := false;

break;

end;end;

if (i = n) then

findt := true;

end;begin

randomize;

k := 1;

j := 1;

for i := 1 to 8 do

begina := random(8) +1;

k := k + 1;

if (k <= 2) then

begins[i] := a;

t := a;

endelse

beginfor j := 1 to i - 1 do

beginif s[j] = a then

beginrepeat

a := random(8) +1;

until (findt(s, a, 8) = false);

if (findt(s, a, 8) = false) then

s[i] := a;

endelse

beginend;

end;if (j = i) then

s[i] := a;

end;end;

for i := 1 to 8 do

write(s[i], ' ');

readln;

end.

10樓:網友

可以設定你的陣列為乙個列舉型, type tarr = array[0..3] of char;

procedure test(arr:tarr);

或者用動指標。

11樓:糖糖寳寳

在函式中如果陣列的個數不定,可以使用開放陣列引數。

實參可以接受靜態陣列和動態陣列。

procedure p1(a:array of byte);

beginshowmessage( inttohex( integer(@a),2));

showmessage(inttostr(a[0]))

end;procedure : tobject);

vara:array[0..5] of byte;

beginshowmessage(inttohex( integer(@a),2));

p1(a);

end;function find(a: array of char): integer;

以上函式使用字元陣列作為引數傳值,其中a:array of char雖然有著與動態陣列。

dynamic array相近的形式,但是在這裡它並不代表著動態陣列。這裡a:array of char

可以使用任意靜態或動態陣列。

另外,如果一定使a:array of char為動態陣列,則須使用以下形式:

type tdynamicchararray = array of char;

function find(a: tdynamicchararray): integer;

例子(function find(a: array of char): integer;

beginsetlength(a,100);//出錯,應為setlength只能用於動態陣列。

end;function find(a: tdynamicchararray): integer;

beginsetlength(a, 100);//正確。

end;

delphi中如何將陣列轉換為指標?

12樓:網友

我覺得你應該先搞清楚writebuffer寫入的時候是按照多少位元組寫入的,也就是說是1位元組、2位元組還是其它。

一般如果僅僅是記憶體區域的話,我覺得按1位元組的可能性最大,這樣就存在問題了,你定義的是bufbit: array of integer; integer在delphi中是4位元組的,你要是轉化的話建議轉化為byte指標比較好:

varbp: pbyte;

beginbp:= pbyte(@bufbit[0]);

處理部分。另外,一樓所說很有道理!

1、看你writebuffer的寫法似乎是為了和c語法相容,未指定長度的話可能會以 0 作為結束符,需要注意。

2、或者裡面隱含處理的長度,這樣的寫法不安全,可能會造成未知的錯誤,或讓程式崩潰!

13樓:文件類共創空間

關於delphi陣列,指標,字串轉換的例子:

varaa: array [0..5] of char;

bb:pointer;

cc:string;

dd:pchar;

procedure : tobject);

begindd:='abcdef';

以下是pchar內容轉陣列。

fillchar(aa,length(dd),#

move(dd^,aa,sizeof(aa));

以下是陣列傳遞到指標。

bb:=getmemory(sizeof(aa));

move(aa,bb^,sizeof(aa));

以下是指標內容傳遞給字串。

setlength(cc,sizeof(aa));

move(bb^,cc[1],sizeof(aa));

freememory(bb);//這個是釋放記憶體//以下是陣列轉pchar

dd:='';

dd:=pchar(@aa);

messagebox(0,pchar('cc: '+cc),pchar('dd: '+dd),0);

end;

14樓:文句子

@bufbit,還是@bufbit[0]

如果bufbit定義的下標是從0開始的,二種寫法沒有區別,效果一樣。@是肯定都要帶著的。

但是你的陣列如果僅僅是寫了「var bufbit: array of integer;」,肯定不能直接拿來引用。

引用前要麼動態分配一下,要麼直接重新定義成固定長度的陣列,如array [0..bufmaxsize-1]of integer;。pascal不像c,它定義陣列的下標可以不從0開始。

15樓:網友

@bufbit[0]就可以了,會自動轉換的。

delphi7如何個一維陣列賦初值

16樓:網友

vari : integer;

arr1 : array[0..9] of integer;

arr2 : array[0..9] of char;

begin/如果是初始化是給每個元素相同的初值,可以用fillchar這個函式來。

fillchar(arr1,sizeof(arr1),0);

fillchar(arr2,sizeof(arr2),#

如果每個元素要賦的初值不同,只能乙個個來賦值了for i := 0 to 9 do

beginarr1[i] := i;

end;end;

Delphi中的low(陣列)是什么意思

high x 函式返回引數的取值範圍內的最大值,其型別為x,或x的 索引。x既可以是一個型別標識,也可以是一個變數,其型別必須為下面之一 變數型別 high x 的返回值 序數型別 這一型別的最高取值 陣列型別 陣列索引的最大值 字串型別 這一字串宣告過的長度 動態陣列 返回實際元素個數的負值 字串...

如何在Delphi中實現停靠,delphi2007怎麼把懸浮的工具欄弄成停靠的

delphi安裝目錄裡面有demo,自己去找找.delphi2007怎麼把懸浮的工具欄弄成停靠的 選單view desktops default layout delphi中元件的浮動和被停靠的是什麼意思?這是實現拖曳 drag 功能,只有支援浮動的視覺化元件 如item.可以被拖曳,有被停靠屬性的...

delphi判斷是否有字串,delphi判斷字串是否含有數字

有兩種方法 1 在edit1的onkeypress事件中輸入如下 delphi 判斷字串是否含有數字 有兩種方法 1 在edit1的onkeypress事件中輸入如下 delphi如何判斷一個字串是否包含另一個字串 if pos 另一個字串 一個字條串 0 then begin 包含end delp...