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...