TTable като параметър..

4 отговора 176 прегледа
#1

TTable като параметър..

TTable ми е параметър на процедура. Възможностите при декларирането на процедурата е параметрите й да са const, var или да не се укаже нищо.
TTable търпи промени в процедурата ми. Независимо дали обявявам TTable като const или var не забелязах разлики в работата.
Някой от вас експериментирал ли е в тази насока. Интересува ме дали би имало отражение върху резервирана памет или бързодействие.

Отговор
в отговор на Учeниka #2

Re: TTable като параметър..

В твоя случай, TTable е инстанция на обект и въщност ти винаги подаваш адреса му на процедурата. Дали е const или var параметър няма значение (при const адреса се копира в локална променлива), защото каквото и да промениш, промяната винаги ще се отрази на обекта.

Const и var са от значение тогава, когато работиш с прости типове данни или със статични масиви. При const или когато не укажеш нищо, се създава локално копие на променливата за дадената процедура или функция и референтната променлива не се засяга. Освен това, локалната стойност не може да се променя, ако изрично си указал да бъде const. Ако обаче имаш някакъв голям масив е добре да работиш с него като var параметър - с други думи директно, защото копирането му в локалната памет (ако не е зададен като var параметър) отнема време и ресурси. Ако масива е динамичен, с него се работи подобно на работата с обекти - подава се началният му адрес в паметта.

Има още доста подробности, но накратко и това е достатъчно. Отнеси се към хелпа за повече инфо.

Mixy
Отговор
в отговор на Mixy #3

Re: TTable като параметър..

Едно уточнение
Предаването на параметрите в Pascal може да е по адрес (var) или по стойност (без var)
const e въведено от TPascal 7 (ако не ме лъже паметта) което си е предаване по адрес (по икономично), но компилатора следи да не се променя стойността по предадения адрес.
В случая за параметъра, който е TTable се предава само указател и той не се променя. Но независимо дали ще го предаваш по адрес или по стойност през стека ще прехвърлиш винаги 8 байта, така че се тая как ще го предаваш. Още повече, че и компилатора е "информиран" за тези особености и ти генерира един и същ код в двата случая

Отговор
в отговор на NDeu #4

Re: TTable като параметър..

Знаех си, че има и по-прост начин да се каже ...



Mixy
Отговор
в отговор на Mixy #5

Благодаря...

Благодаря за хубавите обяснения. По принцип нещата ми бяха ясни, само за TTable имах съмнения.

Отговор