delphi 7中陣列如何當引數

2022-03-05 07:44:46 字數 6118 閱讀 3478

1樓:至少讓我看一眼

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

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

所以自然無法通過編譯。解決的方法事實上非常簡單,只需要將實參s的型別修改為tdigits即可。整理後的**如下:

uses

sysutils;

type

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

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

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

vari: longint;

begin

for i := 1 to n do

begin

if (f[i] = a) then

begin

findt := false;

break;

end;

end;

if (i = n) then

findt := true;

end;

begin

randomize;

k := 1;

j := 1;

for i := 1 to 8 do

begin

a := random(8) + 1;

k := k + 1;

if (k <= 2) then

begin

s[i] := a;

t := a;

endelse

begin

for j := 1 to i - 1 do

begin

if s[j] = a then

begin

repeat

a := random(8) + 1;

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

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

s[i] := a;

endelse

begin

end;

end;

if (j = i) then

s[i] := a;

end;

end;

for i := 1 to 8 do

write(s[i], ' ');

readln;

end.

2樓:匿名使用者

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

procedure test(arr:tarr);

或者用動指標

3樓:糖糖寳寳

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

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

procedure p1(a:array of byte);

begin

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

showmessage(inttostr(a[0]));

end;

procedure tform1.btn1click(sender: tobject);

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

begin

showmessage(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;

例子(e.g.)

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

begin

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

end;

function find(a: tdynamicchararray): integer;

begin

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

end;

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

4樓:匿名使用者

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

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

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

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

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

如:function tform1.upadd(var na:intarray): integer;

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

5樓:

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

6樓:

type

pintarr = ^intarray;

intarray = array[1..3] of integer;

function tform1.upadd(const na:intarray): integer;

varnb: pintarr;

begin

new(nb);

nb^ := na;

nb[1]:=30;

nb[2]:=30;

nb[3]:=30;

upadd:=na[3];

dispose(nb);

end;

7樓:匿名使用者

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

delphi7如何個一維陣列賦初值

8樓:

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),#0);

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

begin

arr1[i] := i;

end;

end;

9樓:匿名使用者

或者array of char這中的陣列吧。

varstr : string;

pbuf: array[0..100]of char;//array[0..100]of byte

len : integer;

begin

str := 'abcdefg';

//將str的值賦給陣列pbuf

strpcopy(@pbuf,str);

end;

另外,團idc網上有許多產品**,便宜有口碑

10樓:匿名使用者

來個動態陣列的例子

vari:integer;

arr1 : array of integer;

begin

setlength(arr1,10);//分配10陣列//下面列出倆中方式初始化

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

for i := low(arr1) to high(arr1) do

begin

arr1[i] := 0;//這裡可以賦你自己想要的值end;

end;

delphi 動態陣列作引數

11樓:匿名使用者

type

tarrmyrec = array of tmyrecord;

...function mygetmem ( var arec: tarrmyrec; const nszie: integer):boolean

begin

result := ( nszie >= 0);

if ( nszie < 0)then

exit;

setlength( arec, nszie);

arec[ 0] := ...

end;

// 如果引數這樣寫:

procedure( var arec: array of tmyrecord )

varlen

begin

len := ...

setlength( arec, len);   // 如果函式體內這樣寫 ,編譯的時候會提示 型別不匹配,

//因為作為傳出引數必須要先定義,delphi才知道傳出引數的型別。函式的返回值是陣列的也是一樣要先定義的。

//function( a:integer ) :array of tmyrecord;  這樣也是不允許的

type

tarrmyrec = array of tmyrecord;

function( a:integer ) :tarrmyrec;

//這樣是允許的。

end因為

12樓:匿名使用者

type

tdynmyrec = array of tmyrecord;

...founction ( var arec: tdynmyrec; const nszie: integer):boolean

begin

result := ( nszie >= 0);

if ( nszie < 0)then

exit;

setlength( arec, nszie);

arec[ 0] := ...

end;

13樓:

把var變參申明去掉試試看,不要var。

delphi7中怎麼把一個字串賦值給一個一維陣列。急啊。謝謝了。

14樓:匿名使用者

樓主所說的數

組應該是array of byte 或者array of char這中的陣列吧。

varstr : string;

pbuf: array[0..100]of char;//array[0..100]of byte

len : integer;

begin

str := 'abcdefg';

//將str的值賦給陣列pbuf

strpcopy(@pbuf,str);

end;

15樓:匿名使用者

不用賦值的啊,字串本來就是一個一維陣列啊。

舉個例子:

varstr : string;

i : integer;

begin

str := 'abcdefg';

for i:=1 to length(str) dobegin

showmessage(str[i])

end;

end;

上面這個例子就是將字串變數 str 中的字元一個一個的用showmessage顯示出來。

delphi7如何判斷字串是不是float或

varn integer f double if trystrtoint astring,n then 是整數,且存入了n if trystrtofloat astring,f then 是float,且存入了f 隨手寫的一段,只是簡單的判斷一下,沒有考慮資料型別的界限,可參考 procedure ...

delphi7不支援UNICODE是怎麼個不支援法

delphi7用的是ansi編碼,這是和作業系統的區域設定有關的,例如你是中文系統,那麼你的字符集就是gbk gbk雖然是中文字符集,但不代表就完全只有中文字元,它也有一定的外語文字,例如日文,但這是在gbk字符集環境下才能顯示出的日文。假如是一個日本人在日文windows下用你的程式的話,他就會看...

delphi7中怎麼把字串賦值給一維陣列急

樓主所說的數 組應該是array of byte 或者array of char這中的陣列吧。varstr string pbuf array 0.100 of char array 0.100 of byte len integer begin str abcdefg 將str的值賦給陣列pbuf...