Вы находитесь на странице: 1из 12

7. VARIABILE POINTER 7.1. Tipul variabilei pointer Pentru programatorii are uno! un limba" #e a!

amblare$ #e%inirea &i utili'area variabilelor pointer (n limba"e evoluate #e programare$ repre'int) operan'ii ne e!ari implement)rii a#re!)rii in#ire te. La a#re!area in#ire t) !e utili'ea') #oi operan'i &i anume* operan#ul are re%er) &i operan#ul re%erit$ nota+i (n ontinuare R, !i re!pe tiv Or. Operan#ul R o on+ine a#re!a #e (n eput a 'onei #e memorie a!o iat) operan#ului O r . Evaluarea e-pre!iilor* R, . a#r/Or0 Or . 1 1 on#u e la mo#i%i area on+inutului operan#ului Ro &i a operan#ului Or a!t%el*

R, ,7221A

Or 11 ,7221A

4e i* ont/R,0 . a#r /Or0 A ea!t) e ua+ie arat) ) operan#ul Ro e!te #e un nou tip$ T p $ ale )rui valori apar+in intervalului 5A i $ A % 6 7 N$ un#e A i &i A % !unt a#re!e #e (n eput &i$ re!pe tiv$ #e !%8r&it ale unui !egment #e memorie. 4a )* %/ ont/R,0$Tp0 . TR9E$ a#i ) ont /R,0 7 5Ai$ A%6 7 N :; !e !pune a operna#ul R, e!te #e tipul Tp. <n ontinuare a e!t nou tip #e #at) e!te numit tipul pointer. =un +ia lg/R,$TP0. #e%ine&te o a!t%el #e m)rime are !) permit) !to area omplet) a in%orma+iei ne e!are lo ali')rii operan'ilor$ ale )ror a#re!e !e (n ar ) (n variabila Ro. E-pre!ia* ont/Ro0 . a#r/Ro0 are !emni%i a+ia (n )r )rii (n operan#ul Ro a propriei a#re!e.4up) evaluarea e-pre!iei$ on+inutul lui Ro e!te*

Ro ,7221A ,7221A
<n !ine$ e-pre!ia nu are o !emni%i a+ie #eo!ebit)$ mai mult o%er) ri! ul (n >i#erii unui lan+ #e re%erire$ tran!%orm8n#u?l (n i lu in%init. 4a ) (n!) operan#ul Ro #evine reper &i toate #epla!)rile !unt evaluate av8n#u?l a ba')$ e-pre!ia #e mai !u! !e "u!ti%i ). 4a ) !e #e%ine! variabilele a$b$ av8n# tipul Ti$ &i variabilele pa$ pb$ pe av8n# tipul Tp$ evaluarea e-pre!iilor* pa . a#r/a0 pb . a#r/b0 pe .a#r/ 0 reali'ea') ini+iali'area operan'ilor #e tip Tp. 4a ) lu)m (n on!i#erare a e!te e-pre!ii (n lo #e* . a@bA vom utili'a e-pre!ia* re%/p 0 . re%/pa0@re%/pb0 un#e %un +ia #e re%erire re%/0$ e!te #e%init)* re% * 5Ai$ A%6 ?B I un#e mul+imea e!te interpretat) #rept on+inutul 'onei #e memorie a!o iate i#enti%i atorilor. Ob!erv)m ) prin #e%inirea %un +iei a#r/0 a#r * I?B 5Ai$ A%6 %un +iile a#r/0 &i re%/0 nu !unt una inver!) eleilalte. E!te a#ev)rat) numai egalitatea* - . re%/a#r/-00

a#r/-0

re%/-0

ont/p-0 F 5Ai$ A%6 7 N ont/pE0 F 5Ai$ A%6 7 N pe mul+imea 5Ai$ A%6 7 N !e #e%ine&te opera+ia GHI$ a!t%el (n 8t pentru J K $LF 5Ai$ A%6 7 N K HL.M MF 5Ai$ A%6 7 N 4a )$ #e e-emplu$ on!i#er)m intervalul 5,AN2,,,6 7 N$ opera+iile #e a#unare$ (nmul+ire$ ! )#ere &i (mp)r+ire$ nu !unt legi #e ompo'i+ie intern). Prin ontrae-emple !e #ove#e&te ) e-i!t) K &i L a!t%el (n 8t* 5,AN2,,,6 7 N Aparent$ nu !e vorbe&te #e o aritmeti ) a variabilelor pointer. Totu&i !e on!truie! e-pre!iile u variabile pointer$ u on#i+ia a re'ultatul evalu)rii !) apar+in) intervalului 5Ai$ A%6 7 N. 4a ) !e #e%ine&te ma!ivul uni#imen!ional* %loat - 51,6A &i p- e!te un pointer !pre (ntreg$ &i p- . a#r/-5l60 evaluarea e-pre!iei* p- . p- @ N . a#r/-5l60 @ lOlg/real0 . a#r/-5D60 on#u e la po!ibilitatea #e a re%eri$ elementul al #oilea al ve torului -. 4a )* p- . a#r/-5l,6 0 &i evalu)m e-pre!ia p- . p-?D2 p- . a#r/-51,60?2Olg/real0 . a#r/-5N60 <n e-pre!iile* a#r/'@P0 . a#r/'0@POlg/Ti0 un#e ' e!te o variabil) #e tip Ti$ ob!erv)m ) pentru variabila p' #e tip Tp$ are a %o!t ini+iali'at) prin* p'* . a#r/'0A a#r/'@P0 . p' @ POlg/Ti0 &i pentru ) tipul Tp . /pointer$Ti0$ e-pre!ia POlg/Ti0 e!te re'ultatul onver!iei la tipul Tp al variabilei p'$ a variabilei (ntregi P. <n a ela&i mo#$ !e #e%ine&te &i opera+ia #e ! )#ere$ (n ambele a'uri apare erin+a a re'ultatul evalu)rii e-pre!iilor !) apar+in) intervalului 5Ai$ A%6 7 N. Qe on!truie! teoreti $ e-pre!ii #eo!ebit #e omple-e$ (n are operan'ii !) %ie #e tip Tp$ #ar re!tri +ia #e apartenen+) a re'ultatului la a el interval le %a e inoperante. <n plu!$ lu rul u a#re!e (n 'one #e memorie ontigue &i mai ale! pentru !tru turi #e #ate omogene$ vi'ea') po!ibilitatea #e a genera termenii unor progre!ii aritmeti e. 4a ) variabila p- #e tip Tp$ e!te ini+iali'at) prin* p- . a#r/-5160A ! . ,A %or / i . , A i R 1, A i @ @ 0 S ! . ! @ re%/p-0A p- . p-@2A TA variabila p-$ permite re%erirea r8n# pe r8n# a elementelor -5,6$ -516....$-5U6 ale ve torului -. Vai mult$ #e%inin# p- variabila #e tip Tp (n !e ven+a* p- . a#r/-0A ! . ,A pi . a#r/-5,60A #o S ! . !@re%/pi0A pi.pi@2A TW>ile /pi R . a#r/-5U600A #i%er) %oarte pu+in #e !e ven+ele are implementea') !tru turile repetitive (ntr?un limba" #e a!amblare oare are. Ca &i (n limba"ele #e a!amblare$ re!tri +iile #e apartenen+) la #omeniul 5AiAA%6 7 N$ au #eterminat ) pentru variabilele pointer$ aritmeti a !) !e re#u ) la #ou) opera+ii* in rementarea &i #e rementarea. A e!te opera+ii (n!eamn) #e %apt ma"orarea$ re!pe tiv #iminuarea u o unitate$ #up) um urmea')* a#r/-@l0 . a#r/-0 @ 1Olg/Ti0 . p- @ lOlg/Ti0 a#r/-?l0 . p- X lOlg/Ti0 Conver!ia #e tip$ #etermin) a unitatea !) %ie egal) #e %apt u lungimea a!o iat) 'onei #e memorie o upat) #e variabilele #e tip Ti. <n a'ul unor e-pre!ii omple-e notate * e-pr/a, a1 ... an?10

a#r/-@e-pr/a, a1 .....an?100 . p-@int/e-pr/a, a1 .....an?100Olg/Ti0 Qe on!i#er) ) e-pre!ia* p-@int/e-pr/a, a1 .....an?100Olg/Ti0 . K e!te ore t #e%init) #a ) K F 5Ai$ A%6 7 N <n limba"ul CYC@@$ (n )r area a#re!elor variabilelor #e%inite (n program$ !e e%e tuea') u operatorul Z. Core!pon#entul CYC@@ al !e ven+elor #e mai !u! e!te* tEpe#e% int mat51,6A mat - . S1$D$ [$2$1$ N$ 7$ \$ U$ 1,TA int O p-A un!igne# int i$ !A S ! . ,A %or / i . , A i R 1, A i @ @0 S p- . Z -5i6 ! . ! @ / Op- 0A TA out RR !A Ab!en+a ontrolului a!upra limitelor #e varia+ie pentru variabilele #e tip T p $ #etermin) !) #evin) operan'i 'one ne!pe i%i e programului$ alter8n# (n a e!t %el in lu!iv omponente ale !o%tWare?lui #e ba')$ u on!e in+e a!upra alit)+ii prelu r)rilor urente &i >iar viitoare. 7.[. Nivele #e in#ire tare Apare (n mo# %ire! (ntrebarea$ #a ) tipul T p #e%init ini+ial /pointer$ Ti0$ un#e Ti repre'int) un tip %un#amental #e #at)$ in lu#e &i pere >ea /pointer$Tp0$ &tiut %iin# %aptul ) &i tipul Tp e!te on!i#erat tip %un#amental. A ept8n# ) o a!t%el #e on!tru +ie e!te ore t)$ !e reea') po!ibilitatea reali')rii #e pointeri !pre pointeri !preTi &i a pointerilor !pre pointeri !pre pointeri !pre Ti. Qe #e%ine! variabilele* int ]$ - A int O pE$ Op- A YY /pointer$ integer0A int OO pp-A YY /pointer$/pointer$integer00A prin e-pre!iile* - . D,A p- . a#r/-0A pp- . a#r/p-00 !e ob+ine*

iar e-pre!iile* pE . a#r/E0A E . lNA on#u la*

E-pre!ia* re%/E0 . re%/E0 @ re%/re%/-00A e!te e >ivalent) u*

E.E@-A Programul CYC@@ are evaluea') e-pre!ia e!te* tEpe#e% int O pintA int -$ E * integerA pint p-$pEA pint O pp-A S - . D, A E . 11A p- . Z -A pE . Z EA pp- . Zp-A OpE . OpE @ OOpp-A out RR OpE A TA Con!tru +ia /pointer$ Tp0 permite ompunerea unei %un +ii a#r/0 a!o iate nivelelor in#ire tate. <n #e%ini+ia* int - A int Op- A YY /pointer$ integer0 int OOpp- A YY /pointer$ /pointer$ integer00 int OOOppp- A YY /pointer$ /pointer$/pointer$ integer000 &i #in !e ven+a* - . 17A p- .a#r/-0A pp- . a#r/p-0A ppp- . a#r/pp-0A ob+inem )* ppp- ? a#r/a#r/a#r/-000 . a#r[ /-0 Num)rul [ repre'int) nivelul #e in#ire tare. Pentru re%erirea unei variabile av8n# nivelul [ #e in#ire tare$ !e pro e#ea') a!t%el* re%/re%/re%/ppp-000 . re%[ /ppp-0 Pentru omogeni'area operan'ilor (n a#rul e-pre!iilor$ e!te ne e!ar a variabilele (n are tipul Tp are puterea n$ !) %ie ini+iali'ate u a#r /0 &i !) %ie re%erite u re%n /0. Qe on!i#er)* T1p . /pointer$Ti0 TDp . /pointer$ /pointer$ Ti0 T[p . /pointer$/pointer /pointer$ Ti000 Et . Pentru e%e tuarea unor generali')ri privin# aritmeti a or#inului n a tipului Tp e!te ne e!ar) #e%inirea %un +iei pentru evaluarea lungimii a e!tui tip. A!t%el$ e-pre!ii a* a#rP /a#r>/-0@i0 !au a#rP /a#r>/-0?i0 #evin interpretabile. A&a um pentru toate tipurile #e #ate e-i!t) on!tante e !unt atribuite &i pentru tipul pointer$ e-i!t) on!tante ore!pun')tor #e%i Con!tantele pentru tipul pointer$ !imboli'ea') a#re!e ab!olute. Qe vorbe&te #e a#re!) nul)$ !e vorbe&te #e a#re!a 11$ !au #e ori e a#re!). 4a ) (n!) un program P lan!at (n e-e u+ie$ o up) 'ona #e memorie #elimitat) prin 5Aip $ A%p6 7 N$ ini+iali'area ori )rei variabile poin e!te e%e tuat) u valori uprin!e (n a e!t interval. =olo!irea valorii nule are numai ! op #e "alonare la ini+iali'are$ pentru a ve#ea #a ) %) ut atribuiri ulterioare pentru a lu ra ore t$ !au atribuirile nu au %o!t po!ibil !) !e e%e tue'e &i #e i nu !e lu rea') pentru ) varia pointer are valoare nul). <n programele CYC@@$ re%erirea unei variabile pointer p- u 1 nivele #e in#ire tare$ #e e-emplu$ !e reali'ea') prin evaluarea e-pre!iei* OOOOOP-A iar pentru valoarea nul) a variabilei pointer$ !e %olo!e&te on!tanta !imboli ) N9LL. Ini+iali'area unei variabile pointer u o

a#re!) ab!olut) #e memorie !e reali'ea') u %un +ia Ptr/0$ av8n# a parametru o a#re!) (n >e-a'e imalA #e e-emplu* pE * . Ptr/_,,AA$_,,D,0A

7.2. Ve tori &i matri e #e pointeri ai u tipul Tp !e on!truie! !tru turi #e #ate omogene$ #a ) toate omponentele a e!tora au tipul Tp. Con!tru +ia* Tp -5n6A Tpi E5n65m6A repre'int) #e%inirea unui ma!iv - av8n# n omponente$ %ie are omponent) %iin# un pointer !pre Ti &i$ re!pe tiv$ #e%inirea unei matri e E av8n# n linii &i m oloane$ elemente e !unt pointeri !pre tipul Ti. Qe "u!ti%i ) !to area (n ma!ive uni &i bi#imen!ionale a a#re!elor unor operan'i$ #a ) a e&tia au #i%eren+ieri (ntre ei$ !au #a ) tipologiile #etermin) a tiv)ri #e %un +ii #up) !u e!iuni !tabilite. Qe memorea')$ #e e-emplu$ me!a"ele unui program e apar (n #ialogul u utili'atorul$ !ub %orma unui te-t ontinuu. A e!tor me!a"e$ (n num)r #e 1,$ li !e memorea') a#re!a #e (n eput (n omponentele ve torului te-t5i6$ #e pointeri !pre tipul !tring. 4a ) !e #ore&te a%larea tuturor me!a"elor prin !e ven+a* %or /i . , A i R 1, A i @ @ 0 out RR re%/te-t5i60A !e ob+ine a ela&i lu ru. 4a ) !e #ore&te a%i&area unui anumit me!a"$ e!te important !) !e unoa! ) po'i+ia (n ve torul te-t56 a omponentei (n are e!te memorat) a#re!a re!pe tivului me!a". 4a ) (n ele in i omponente ale unui ve tor #e pointeri numit p-$ memor)m a#re!ele primelor omponente ale ve torilor a56$ b56$ 56$ #56$ e56$ u num)r #e omponente #i%erite &i #orim !) al ul)m u %un +ia$ !uma/0$ !uma elementelor ve torilor$ (n lo !) ! riem #e in i ori apelul %un +iei !uma/0$ ! riem !e ven+a* %or /i . , A i R 1 A i @ @ 0 !5i6 . !uma/p-5i6$ n5i60A #a ) #e%inim* int -151,6$ -D51,6$ -[51,6$ -251,6A Tp E526A T D p 'A prin atribuirile* E5,6 . a#r/-l5,60A E516 . a#r/-D5,60A E5Dl . a#r/-[5,60A E5[6 . a#r/-25,60A ' . a#r/E5,60A !?a ob+inut on!tru +ia u mo#elul gra%i *

'

E5,6

E516

[6 E5D6

E5[6

are e!te i#enti u mo#elul gra%i a!o iat !tru turii #e #ate omogene &i ontigue$ matri ea. Tot a!t%el$ !e #e%ine&te o %un +ie % t/0$ are !e apelea') prin* % t/pl$ pD$ p[$b$ pn0 La apel$ on!truie&te un ve tor u n omponante (n are !unt memorate a#re!ele parametrilor reali ai %un +iei$ #e i ve torul a e!ta e!te un ve tor #e pointeri. A#re!a primei omponente a ve torului e!te memorat) (ntr?un regi!tru. A e!t regi!tru on+ine a#re!a li!tei #e a#re!e a parametrilor. <n a'ul (n are la #e%inire %un +ia are parametri %ormali K1$ KD$.....$ Kn &i #a )* tip/pi0 . tip/Ki0 J iF 51.D....n6$ (n!eamn) ) !?a ob+inut on or#an+a (ntre tipul parametrilor reali &i tipul parametrilor %ormali. Tran!miterea parametrilor %ormali prin valoare$ vi'ea') e%e tuarea opierii valorilor parametrilor reali pi (n 'onele #e

^D

^[

^2

memorie #e%inite (n %un +ie$ parametrilor Ki$ opera+ie !imboli'at) prin e-pre!ia #e atribuire* Ki . piA i . 1$ D$ ...$n <n a'ul (n are are lo o inver!are a parametrilor !au omiterea unuia #intre ei$ #i!pare on or#an+a #e tip &i tipul parametrului Ki e!te Ti$ iar tipul parametrului pi e!te T"$ eea e impune e%e tuarea onver!iei #e la tipul T" la tipul Ti$ u toate e%e tele pe are onver!ia #e tip le antrenea'). Ki . onv/pi$Ti0 #etermin) perturbarea ra#i al) a re'ultatelor. 4a ) parametrii pi !unt variabile pointer (n %un +ie$ !e operea') a!upra 'onelor #e memorie e-terne a e!teia$ a 'onelor ale )ror a#re!e !unt on!ervate (n variabilele pointer pi. A ea!ta e-pli ) ne e!itatea a %un +ia #e inter! >imb #e valori !) on+in) pointeri pentru elemente &i nu elementele (n!)&i. <n ontinuare !e ia (n #i! u+ie programul e-e utabil a #at). Ori e program e-e utabil e!te %ormat #in in!tru +iuni e-e utabile &i 'one #e memorie e !erve! a operan'i. Ori e program are o prim) in!tru +iune e-e utabil) &i o ultim) in!tru +iune e-e utabil). 4e obi ei$ (n a'ul %un +iilor$ prima in!tru +iunea e-e utabil)$ eti >etat) u numele %un +iei$ !e nume&te pun t #e intrare (n %un +ie. In!tru +iunea #e apel a %un +iei$ e%e tuea') un !alt ne on#i+ionat !pre pun tul #e intrare (n %un +ie. 9ltima in!tru +iune e-e utabil) #intr?o %un +ie$ e!te un !alt ne on#i+ionat )tre programul apelator$ pe ba'a in%orma+iei are lo ali'ea') un#e !e e%e tuea') revenirea. A ea!t) in!tru +iune !e nume&te pun t #e ie&ire #in program. 4in pun t #e ve#ere al !tru turilor #e #ate$ a e!te pun te !unt #e %apt elemente %ol lori e$ are prin pitore! ul lor olorea') limba"ul programatorilor. Ca !tru tur) #e #ate$ te-tul e-e utabil e!te un te-t omogen$ atun i 8n# toate in!tru +iunile au o lungime &i o !tru tur) %i-at). <n ele mai multe a'uri$ in!tru +iunile ne e!it) in%orma+ii are #etermin) e-ten!ii pe uvinte a#ia ente$ re#u 8n# gra#ul #e omogenitate a !tru turii #e #ate numit) program. Totu&i$ !tru tura #e #ate numit) program e-e utabil e!te #elimitat) prin #ou) in!tru +iuni e-e utabile u a eea&i !emni%i a+ie$ ori are ar %i %un +ia ! ri!) (ntr?un limba" evoluat. A e!t lu ru !e #atorea') !tan#ar#elor #e preluare a parametrilor &i #e revenire (n %un +ia apelatoare. 4a ) on!i#er)m %un +iile %1/0$ %D/0$ ...$ %m/0 )rora le ore!pun# m te-te program e-e utabil$ memorate (n m 'one #e memorie$ prin %l/0$ %D/0$ ..... %m/0$ !imboli')m a#re!ele primelor in!tru +iuni e-e utabile ale a e!tor %un +ii$ &i #a ) #e%inim pun tele #e intrare a un nou tip #e #at) numit tipul #e #ate %un +ie$ putem on!trui un ve tor #e pointeri* a!o iate /pointer$%un +ie0 p% 5m6A pe are (l ini+iali')m a!t%el* p%5i6 . %/ 0A i.1$D$bb$m <n lo !) ! riem o !e ven+a u m apeluri #e %un +ii$ putem re#u e totul la !e ven+a* %or / i . , A i R m A i @ @ 0 p% 5i6 /p1 5i6$ pD 5i6$ ...$ pn5i60A 4e i ve torul #e pointeri !pre %un +ii$ %a ilitea') rearea unor !e ven+e #inami e #e apel$ (n timpul e-e u+iei prin variabilitatea in#i elui i. 4a ) (n!)$ %un +iile #e intrare !e memorea') (ntr?o matri e #e pointeri !pre %un +ie$ avem imaginea unei mai mari #iver!it)+i &i %le-ibit)+i #e prelu rare$ eea e permite reali'area #e !i!teme #e programe$ ve ine prin omple-itatea lor u !i!temele #e program e-pert. 7.1 Variabile #e tip pointer &i !tru turile #e #ate #etiparti ol Variabilele pointer$ a #e alt%el ori e alt tip #e variabil)$ apar a membri (n !tru turile #e #ate #e tip arti ol. 4e a!emenea$ o variabil) pointer e!te #e%init) a pointer !pre !tru tur). Con!tru +iile* tEpe#e% !tru t a S int bA Tp A TA b . /pointer$ !tru t0 a -A b EA #e%ine! ? - a variabil) #e tip arti ol ? E a variabil) #e tip pointer !pre arti ol E-pre!iile* E . a#r/-0 re%/E0.b re%/E0. . a#r/'0

re%/E0 . re%/ 0 repre'int) mo#alit)+ile #e ini+iali'are !au utili'are a membrilor !tru turii$ (n on#i+iile (n are elementul ba') #e re%erire e!te o variabil) pointer &i unul #intre membri e!te$ #e a!emenea$ tot o variabil) pointer. 4eo!ebirea e!te ) E e!te un pointer !pre !tru tura -$ iar e!te un pointer !pre (ntreg. Lu rul u %i&iere$ pre!upune !to area #e in%orma+ii privin# ara teri!ti ile %i&ierelor$ pre um &i in%orma+ii #e !tare a prelu r)rii a e!tora. In%orma+iile !unt neomogene &i pentru !to area lor trebuie #e%inite !tru turi ore!pun')toare$ are !e on!tituie #e %apt a un ve tor #e !tru tur). Num)rul #e omponente ale ve torului$ in#i ) num)rul ma-im #e %i&iere u are !e lu rea') (ntr?un program. A e!t ve tor #e !tru tur) !e pune (n ore!pon#en+) u elementele e !e #e%ine! (n programele utili'atorilor. Tipul #e #ate =ILE e!te #e tip pointer !pre o !tru tur) &i ara terul lo al !au global a or#at variabilelor #e a e!t tip$ permite #e%inirea 'onei program #in are programatorul are a e! prin opera+ii #e intrareYie&ire la %i&ier. Programatorul are a e! la %i&iere prin !tru turile #e #ate #e tip =ILE. Numero&i parametri ai %un +iilor #e lu ru u %i&iere$ !unt pointeri are au a ela&i tip u membrii !tru turii #e #ate =ILE$ parametri are permit ini+iali')ri #e membri$ !au ompar)ri are vali#ea') e%e tuarea #e opera+ii. 4a ) %i&ierul (n!u&i e!te pu! (n ore!pon#en+) u un pointer !pre =ILE$ a e!t pointer apare a parametru (ntr?o %un +ie$ eea e o%er) ara ter general apli a+iilor. C8n# !e !pune ) %i&ierul apare a parametru (ntr?o %un +ie$ realitatea e!te ) pointerul variabil) pointer !pre !tru tura #e tip =ILE$ are on+ine #e! rierea %i&ierului u are !e #ore&te !) !e lu re'e (n %un +ie$ !e tran!mite a parametru real. Ob!erv)m ) toate in%orma+iile #e!pre toate entit)+ile$ #ate$ programe &i %i&iere$ !e !tru turea') a#e vat &i #evin re!ur!e la #i!po'i+ia programatorului. Limba"ele evoluate$ pre um C &i C@@$ !unt puterni e prin multitu#inea %un +iilor #e bibliote ) pe are programatorii le apelea'). Numeroa!e %un +ii ne e!it)$ #e%inirea unor variabile (n programe$ #e un tip #erivat$ #e%init a global (n %i&iere$ e trebuie in lu!e (n program. Programatorul trebuie !) unoa! ) a e!te !tru turi$ pentru a putea %olo!i in%orma+iile pe are la returnea') %un +iile apelate. =un +iile$ prime! a parametrii reali variabile elementare$ !au ma!ive$ !au !tru turi$ !au pointeri. !au alte tipuri #erivate &iY!au #e%inite global. =un +iile returnea') valori e !e !to >ea') (n variabile elementare$ (n !tru turi #e tip arti ol$ (n #ate #e tip pointer. Num)rul valorilor returnate e!te unu. Pentru a ob+ine a %un +ia !) returne'e un ma!iv$ uni !au bi#imen!ional$ e !u%i ient a a e!ta !) %ie in lu! (ntr?o !tru tur) #e tip arti ol. Programatorul are %a e #i!tin +ie (ntre toate tipurile #e #ate pre'entate p8n) a um &i are e #eprin! !) ve>i ule'e u&or #e%inirile &i re%eririle a e!tora$ prin %un +ii #e bibliote ) !au %un +ii proprii are a e! la ab!olut toate re!ur!ele unui !i!tem #e al ul. Qe ob!erva )* ? re%erirea unei variabile elementare !e %a e prin nume A ? re%erirea unui ma!iv !e %a e prin nume$ iar al unui element al !)u prin nume urmat #e o e-pre!ie in#i ial) uprin!) (ntre 56A ? re%erirea unei !tru turi #e tip arti ol !e %a e prin nume$ iar a unui membru in#i 8n# numele !tru turii !eparat #e operatorul pun t$ #e numele membrului re!pe tivA ? re%erirea unei #ate #e tip pointer !e %a e prin nume$ iar a variabilei a )rui a#re!) o on+ine$ printr?un operator #e re%erireA ? re%erirea unui %i&ier !e e%e tuea') prin numele variabilei pointer !pre tipul #e #ate =ILEA ini+iali'area &i utili'area a e!tei !tru turi e!te la #i!po'i+ia %un +iilor #e!tinate lu rului u %i&iere. Compar8n# re%eririle$ ob!erv)m ) pentru a #e%ini a e!te tipuri #e #ate !unt ne e!are in%orma+ii are !) in#i e tipul &i or#inea pe are omponentele o au (n a#rul !tru turilor a entit)+i e%e tive$ #e!%)&urate liniar &i ontiguu (n memorie. 7.N. 4e%inirea &i utili'area variabilelor pointer (n limba"ul C <n limba"ul C$ pentru tipul pointer$ prin #e lara+ia tip O nume$ !e prelu rea') tipul. 4e e-emplu* int O p-$ O pE A int -$E A Pentru ini+ili'area variabilelor pointer$ !e %olo!e&te operatorul Z. 4e e-emplu* p- . Z -A pE . Z EA =un +iei #e re%erire (i ore!pun#e operatorul O. 4a ) - e!te1 &i E e!te D$ e-pre!ia* Op- . Op- @ OpEA e!te e >ivalent) u* - . -@EA &i are ore!pon#ent (n on!i#era+iile anterioare* re% /p-0 . re% /p-0 @ re% /pE0 <n a'ul #e%inirii pointerilor !pre tipuri #e #ate #erivate$ !e %olo!e! tEpe#e% !tru t b S on!tru +ii pre um*

int A int #A int eA int O gA TA tEpe#e% b OaA a -A b EA E-pre!iile* - . Z/E0A -?B * . [ -?B #* . -?B O1A -?B e* . 1 -?B g* . A##r/-c$e0A -?B e* . -?B e @-?B gA ilu!trea') mo#alit)+i #e re%erire a membrilor unei !tru turi. <n a'ul #e%inirii* tEpe#e% int A tEpe#e% O bA tEpe#e% b O aA a -A b EA 'A bbbbb e-pre!iile* ' . 7A E . Z/'0A - . Z/E0A out RR OOilu!trea') mo#alit)+i #e lu ru u pointeri !pre (ntreg /variabila E0 &i u pointeri !pre (ntreg/variabila -0. =un +iei re%P/p-0 (i ore!pun#e on!tru +ia OOb#e P oribOOOpIar %un +iei a#rP/p-0$ (i ore!pun#e !e ven+a* p1 . Z/-0A pD . Z/p10A bbbbbb. pP . Z/pP?10A in!tru +iunile* int O p-A int -A bbbbbbbbb p- . Z/-0A - . 7A out RR Opau a ela&i e%e t a out RR -A Apli a+iile omple-e$ ne e!it) #e%inirea #e ve tori #e pointeri !pre matri e$ pointeri !pre ve tori #e pointeri !pre pointeri !pre matri e$ pointeri !pre ve tori #e pointeri. Programele #e mai "o!$ reali'ea') !umele elementelor a trei matri e$ %olo!in# #i%erite mo#alit)+i #e re%erire a elementelor$ !pe i%i ate la %ie are program prin omentariu. Sve tori #e pointeri !pre matri eT din lu#e Rio!tream.>B tEpe#e% int mat5D65[6A tEpe#e% mat O pmatA tEpe#e% pmat ve p5[6A ve p vpA int i$"$PA int !5[6 . S,$,$,TA mat a . S1$1$1$D$D$DTA mat b . S[$[$[$2$2$2TA mat . S1$1$1$N$N$NTA main/0

S vp5,6 . ZaA vp516 . ZbA vp5D6 . Z A %or /P., A PR[ A P@@0 S %or /i., A iRD A i@@0 %or /"., A "R[ A "@@0 !5P6.!5P6@ /Ovp5P605i65"6A outRRefn Quma matri ei eRRPRRe e!te eRR!5P6A T T Sve tori #e pointeri !pre pointeri la o matri eT din lu#e Rio!tream.>B tEpe#e% int mat5D65[6A tEpe#e% mat O pmatA tEpe#e% pmat ve p5[6A tEpe#e% pmatO ve pp5[6A ve p vpA ve pp vppA int i$"$PA int !5[6 . S,$,$,TA mat a . S1$1$1$D$D$DTA mat b . S[$[$[$2$2$2TA mat . S1$1$1$N$N$NTA main/0 S vp5,6 . ZaA vp516 . ZbA vp5D6 . Z A %or /i., A iR[ A i@@0 vpp5i6 . Zvp5i6A %or /P., A PR[ A P@@0 S %or /i., A iRD A i@@0 %or /"., A "R[ A "@@0 !5P6.!5P6 @ /OOvpp5P605i65"6A outRRefn Quma matri ei eRRPRRe e!te eRR!5P6A T T Spointeri !pre ve tori #e pointeriT din lu#e Rio!tream.>B tEpe#e% int ve 516A tEpe#e% int O ve p516A tEpe#e% ve p Opve A int O pppA ve a . S1$D$[$2$1TA ve p pA pve ppA int iA main/0 S %or /i., A iR1 A i@@0 p5i6 . Za5i6A ppp . aA

pp . ZpA %or /i., A iR1 A i@@0 S outRRefneRRO/ppp@i0RRe OO eRR/Op5i60A outRRefneRR/O/Opp05i60A T T Spointeri !pre ve tori #e pointeri !pre pointeri la matri eT din lu#e Rio!tream.>B tEpe#e% int mat5D65[6A tEpe#e% mat O pmatA tEpe#e% pmat ve p5[6A tEpe#e% pmatO ve pp5[6A tEpe#e% ve pp O pve ppA ve p vpA ve pp vppA pve pp pvppA int i$"$PA int !5[6 . S,$,$,TA mat a . S1$1$1$D$D$DTA mat b . S[$[$[$2$2$2TA mat . S1$1$1$N$N$NTA main/0 S vp5,6 . ZaA vp516 . ZbA vp5D6 . Z A %or /i., A iR[ A i@@0 vpp5i6 . Zvp5i6A pvpp . ZvppA %or /P., A PR[ A P@@0 S %or /i., A iRD A i@@0 %or /"., A "R[ A "@@0 !5P6.!5P6@ /OO/Opvpp05P605i65"6A outRRefn Quma matri ei eRRPRRe e!te eRR!5P6A T T 9n e-emplu #e program (n are !unt pu!e (n evi#en+) mo#alit)+i #e re%erire a unor !tru turi omple-e$ e!te on!i#erat urm)torul* din lu#e Rio!tream.>B tEpe#e% int ve 516A tEpe#e% int O pve 516A tEpe#e% pve O ppve A tEpe#e% !tru t !tr' S ve aaA pve paaA ppve pppaA TA tEpe#e% !tr' O p!trA tEpe#e% p!tr p!5D6A tEpe#e% p!O pp!A int i$"A !tr' !t5D6A

p! p!tA pp! p!!A main/0 S !t5,6.aa5,6 . 1,,A !t5,6.aa516 . D,,A !t5,6.paa5,6 . Z!t5,6.aa5,6A !t5,6.paa516 . Z!t5,6.aa516A !t516.aa5,6 . [,,A !t516.aa516 . 2,,A !t516.paa5,6 . Z!t516.aa5,6A !t516.paa516 . Z!t516.aa516A p!t5,6 . Z!t5,6A p!t516 . Z!t516A p!! . Zp!tA !t5,6.pppa . Z!t5,6.paaA !t516.pppa . Z!t516.paaA %or /i . , A i R D A i@@0 %or /" . , A " R D A "@@0 S outRRefnOeRR!t5i6.aa5"6RReOOeRRO/p!t5i6?Bpaa5"60A outRRe@@eRRO//Op!!05i6?Bpaa5"60RRe??eRRO//Op!!05i6?Bpppa5"60A T T

Вам также может понравиться