46
7.3. Формални параметри
write(s[i]); if s[i] = "'" then write("'");
end { for };
write("'");
end { write_quote };
Тази процедура може да се извиква с фактически параметър, представляващ
променлива от тип низ или константа-низ. Ако вместо CONST, е написано VAR, то
фактическият параметър може да бъде само променлива от тип низ. А ако се премахне
ключовата дума CONST, нейният параметър може да бъде и константа, но затова пък
ще се губи време и памет за предаването на цялата стойност на низа.
7.3.4. Нетипизирани параметри
Нетипизираните параметри (променливи или константи) в UniPascal също са
разширение на Pascal. Те се предават винаги по адрес. Фактическият параметър може
да бъде променлива от произволен тип. В тялото на процедурата не е възможно да се
използват директно, а само чрез преопределяне на типа (Type Cast). Ето пример на
функция, която изчислява контролна сума (CheckSum) на променлива от произволен
тип:
function CheckSum(const mem; ByteSize: natural): LongWord;
type mem_array = packed array [1..max(natural)] of byte;
var i: natural;
sum: LongInt;
begin 
{
 контролната сума се пресмята, като се съберат 
}
sum:= 0; 
{ 
стойностите на всички байтове
 }
for i:= 1 to ByteSize do begin
sum:= sum + mem_array(mem)[i];
end { for };
ChеckSum:= sum; 
{ 
или 
return(sum) }
end { ChеckSum };
7.3.5. Параметри от тип низ (STRING)
Стандартният (в UniPascal) тип STRING е привилегирован по отношение на другите
типове. При предаване на параметри от тип низ (STRING) не е необходимо формалният
и фактическият параметри да имат идентични типове, достатъчно е фактическият
параметър да има не по-малка максимална дължина от формалния. При задаване на
формален параметър от тип низ е разрешено да се задава и максималната му граница.
Например:
procedure ExpandTabs(var s: string[79]);
...
На така описаната процедура ExpandTabs може да се предават променливи от
тип string[x], където x е не по-малко от 79.
Ако се зададе формален параметър-променлива от тип низ без спецификатор
за дължина, типът му не се възприема като низ с максимална големина (string[255]),
както това е при променливите. Например, нека горната процедура е дефинирана като:
procedure ExpandTabs(var s: string);
...
В този случай спецификаторът за дължина на фактическия параметър също се
предава на процедурата неявно. Поради това максималната дължина на този низ е
<<  <  GO  >  >>

Вернуться к началу сайта