2. Курсаткичлар хакида бошланғич маълумотлар
Курсаткич шундай узгарувчики, у маълумотнинг кийматини эмас, балки уларнинг хотирадаги жойлашган адресини узида саклайди. Курсаткичларнинг икки хил типи мавжуд: типланган ва типланмаган. Типланмаган курсаткичларнинг эълон килиш учун pointer хизматчи сузидан фойдаланилади, типланган курсаткичларни эълон килиш учун эса курсатилган тип олдидан "^" белгиси куйилади.
Мисол:
var
p: pointer; {типланмаган курсаткич}
pint: ^ integer ; {pint - типланган, бутун типли курсаткич}
x, y: ^ byte; {x, y - байт типидаги курсаткич}
pst: ^ string ; {pst - катор типидаги курсаткич}
Адреси курсаткичда жойлашган зарур маълумотга курсаткич килиш учун курсаткич исмидан кейин "^" белгисини ёзиш керак:
GetImage (0, 0, 100, 100, p^); {график экран сохасининг
маълумотлари р да курсатилган
адресдаги хотира сохасига ёзилади}
pint^ :к2; {pint адреси буйича 2 бутун сони ёзилади}
x^ :к # 12; y^ :к $2; {x^ байтига # 12 кийматини узлаштири-лади, y^ байтига эса $ 2}
pst^ :к ' Ахмад'; {pst каторига 'Ахмад' сузини узлаштирилади}
Курсаткични ишлатиш учун уни факат эълон килибгина колмай, унинг кандай жойни курсатаётганлигига хам катта ахамият бериш зарур. Яъни, курсаткич оператив хотиранинг керакли маълумотлар жойлашган адресини аник курсатиши керак. Курсаткич адресини хато курсатиш кутилмаган натижалар олишга ёки бутунлай программа ишини чиппакка чикаришга олиб келиши мумкин. Шунинг учун, Паскал тилида махсус процедуралар мавжудки, улар ёрдамида хотира адреси аник хисобланади.
1. GetMem процедураси (типланмаган курсаткичлар учун) - тезкор хотирадан зарур микдорда жой ажратади ва унинг адресини курсаткичга жойлаштиради.
Аникланиш: GetMem (var p: Pointer; size : word);
p - курсаткич, size - ажратилган хотиранинг байт улчовидаги микдори.
Мисол:
var
p: pointer;
begin
GetMem (p, 1000); {1000 байт узунликдаги хотира
сохаси ажратилди}
{p^ сохадан фойдаланиш блоки}
FreeMem (p, 1000); {р адресдаги 1000 байт узунликли
хотира сохаси бушатиб куйилди}
end.
2. New процедураси (типланган курсаткичлар учун) - хотирадан зарур жойни банд килиб, унинг адресини берилган курсаткичга жунатади.
Аникланиши: New (var p: pointer);
р - берилган курсаткич.
New ва GetMem процедуралари нисбатан жуда катта хисобланмиш хотиранинг динамик сохасидан зарур микдордаги хотира сураб олади. Шу хотирани банд килиб, унинг адресини мос курсаткичга жунатади. Шундай холлар хам буладики, хотиранинг динамик сохасида буш жой колмайди, у холда шу хотирага юкоридаги процедуралар билан килинган курсаткич куйидаги маълумотли хатони юзага келтиради:
Do'stlaringiz bilan baham: |