0% found this document useful (0 votes)
44 views

Variabile Pointer

The document discusses pointers in programming languages. It defines a pointer variable as a variable that contains the address of another variable in memory. Pointer variables allow indirect referencing through addresses stored in memory locations. Expressions involving pointer variables are constructed such that the result of evaluating the expression is within a specified range or domain. Higher levels of indirection are possible by defining pointers to pointers. Constant values are also defined for pointer types to represent absolute addresses.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views

Variabile Pointer

The document discusses pointers in programming languages. It defines a pointer variable as a variable that contains the address of another variable in memory. Pointer variables allow indirect referencing through addresses stored in memory locations. Expressions involving pointer variables are constructed such that the result of evaluating the expression is within a specified range or domain. Higher levels of indirection are possible by defining pointers to pointers. Constant values are also defined for pointer types to represent absolute addresses.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 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

You might also like