Көрсеткіштер және динамикалық жады.
Нұсқалар.
Дербес компьютердің жедел жады әрқайсысы 1 байт ақпарат сақтай алатын, нөмірленген элементар ұяшықтардың жиынтығы болып табылады. Ұяшықтардың нөмірлері олардың тұрақтары (адрестері) деп аталады. Динамикалық деректер жедел жадыдағы тұрақтары бойынша анықталады. Мәндері жады байтының тұрағын көрсететін ерекше типтi айнымалыны нұсқағыш деп атайды.
Динамикалық айнымалыларды анықтаудың екі тәсілі бар. Егер нұсқағыші белгілі бір мәліметтер типімен байланыстырылса, онда оны типті, әйтпесе типсіз деп атайды. Типті нұсқағышты анықтағанда тип атының алдына ^ таңбасы қойылады:
<Нұсқағыш айнымалының аты> : ^ <базалық тип>;
Нұсқағыштың базалық типiне ешқандай шектеу қойылмайды. Нұсқағыштың бiр ғана тұрақты nil мәнi бар, ол айнымалы мәнінің жоқ екендiгiн бiлдiредi. Нұсқағыштарды nil мәнімен, не өзара салыстыруға болады. Типтері бірдей болғанда ғана нұсқағыштардың біреуінің мәнін екіншісіне беруге рұқсат етіледі. Типсіз нұсқағышты анықтау үшін pointer стандарт типі пайдаланылады:
<Нұсқағыш айнымалының аты> : Pointer;
Типсіз нұсқағыштарды пайдалану программаның орындалу барысында құрылымы мен типі өзгеріп отыратын деректермен жұмыс жасағанда өте қолайлы. Типсіз нұсқағышқа кезкелген типті нұсқағыштың мәнін бере беруге болады. Оны бір типті нұсқағыштың мәнін өзге типті нұсқағышқа беру үшін пайдаланады. Мысалы:
var
a, b, c: ^integer; // бүтін типке нұсқағыштар
r: ^real; // нақты типке нұсқағыше
p: pointer; // стандарт типті нұсқағыш
begin
…………
a:=b; // a нұсқағышына бір типті b нұсқағышының мәнін меншіктеу
p:=r: // cтандарт типті нұсқағышқа мән меншіктеу
c:=p; // c нұсқағышына өзге типті r нұсқағышының мәнін меншіктеу
…………
end.
Нұсқағыш типті анықтаудың басқа типтерден бір артықшылығы бар. Анықтау кезінде оны өзінен кейін анықталатын типпен байланыстыруға рұқсат етіледі. Төмендегі мысалда PersonPointer нұсқағыш типі одан кейін анықталып тұрған PersonRecord жазба типімен байланыстырылған:
type
PersonPointer = ^PersonRecord;
PersonRecord = record
Name: ShortString;
Sex: Boolean;
Next: PersonPointer:
end;
Object Pascal тілінде динамикалық жады біртұтас байттар жиымы ретінде қарастырылады және оны үйім (куча) деп атайды. Динамикалық айнымалыға үйімнен орын бөлу және оны босату үшін қолданылатын процедуралар 14-ші кестеде келтірілген.
Достарыңызбен бөлісу: |