Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 4/Parameters/bg

Sent here from Parameters/bg.

English · Español · Français · Български · 中文(中国) · 日本語

4B - Parameters (author: Tao Yue, state: unchanged)

В заглавието на процедурата може да се включи списък на параметри. Списъкът с параметри позволява да се прехвърлят стойности на променливи от основната програма към процедурата. Новото заглавие на процедурата е:

pascal
procedure Name (????????????_????????????????_??????????????????);

Списъкът с параметри се състои от няколко групи параметри, разделени с точка и запетая:

text
група_параметри1; група_параметри2; ... ; група_параметриN

Всяка група параметри има формата:

text
идентификатор_1, идентификатор_2, ... , идентификатор_n : тип_на_данните

Процедурата се извиква чрез предаване на същия брой и тип аргументи (наречени действителен списък с параметри) като официалния списък с параметри.

pascal
procedure Name (a, b : integer; c, d : real);
begin
  a := 10;
  b := 2;
  writeln (a, b, c, d)
end;

Да предположим, че сте извикали горната процедура от основната програма, както следва:

pascal
alpha := 30;
Name (alpha, 3, 4, 5);

Когато се върнете към основната програма, каква е стойността на alph? 30. И все пак alpha беше предадена на a, на която беше присвоена стойност 10. Това, което всъщност се случи, беше, че a и alpha са напълно различни. Стойността в основната програма не е повлияна от случилото се в процедурата.

Това се нарича предаване по стойност. Предава се стойността на променливата към процедурата.

Друг начин за предаване на параметри е предаване с препратка. Това създава препратка между формалния параметър и действителния параметър. Когато формалният параметър се промени в процедурата, действителният параметър също се променя. „Предаване с препратка“ се указва, като пред групата параметри се напише VAR:

pascal
VAR ??????????????????????????_1, ??????????????????????????_2, ..., ??????????????????????????_n : ??????_????_??????????????;

В този случай константи и литерали не може да се използват като действителни параметри, тъй като те не могат да бъдат променяни в процедурата.

Ето пример, който смесва „предаване по стойност“ и „предаване с препратка“:

pascal
procedure Name (a, b : integer; VAR c, d : integer);
begin
  c := 3;
  a := 5
end;

begin
  alpha := 1;
  gamma := 50;
  delta := 30;
  Name (alpha, 2, gamma, delta);
end.

Веднага след изпълнението на процедурата, gamma има стойност 3, тъй като е референтен параметър, но alpha все още е 1, защото a беше параметър по стойност.

Това може да е малко объркващо. Затова мислете за „предаването по стойност“ като копиране на променлива, след което предавате копието на процедурата. Процедурата работи върху копието и го изхвърля, когато е готово. Оригиналната променлива остава непроменена.

„Предаването с препратка“ предава действителната променлива на процедурата. Процедурата работи директно върху променливата и я връща в основната програма.

С други думи, „предаването по стойност“ е еднопосочно предаване на данни от основната програма към процедурата. „Предаването с препратка“ прехвърля данните и в двете посоки.


From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 4/Parameters/bg", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 3, last changed by WikiArchive .

Edited on wiki.freepascal.org by 2 people, 2021–2022

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
AlpinistbgCreated page
Kai BurghardtKai Burghardt moved page Parameters/bg to Basic Pascal Tutorial/Chapter 4/Parameters/bg: tidy up main name space: create subpage hierarchy for basic Pascal tutorial [cf. [[Special: PermaLink/149778#Cl... (minor)
Kai Burghardtbypass redirects [cf. discussion]
Kai Burghardtbypass language bar/categorization template redirect [cf. discussion] (minor)

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.