Alone Bun venit înapoi.
Ultimul lucru despre care vreau să vorbesc despre structuri este modul în
care acestea sunt legate de funcții cum puteți trece structurile ca un argument pentru un parametru unui parametru într-o funcție și cum este
și mai eficient.
Deci structurile ca argumente pentru funcții după declararea unei structuri numite familie în acest exemplu vor crea
o familie numită.
Cum putem trece această structură ca argument pentru o funcție.
Deci aveți această structură numită familie.
Avem o grămadă de caractere de caractere, numite tată și mamă, iar apoi avem o perioadă intangajă.
Aceasta este definiția noastră de structură.
Știm că este o structură, deoarece cuvântul cheie lovit este acolo, urmat de numele etichetei pe care o avem sau de
brațele curbate și așa mai departe.
Acum, cum de fapt am trecut structura unei funcții numite frați în timp ce ați face-o
exact așa cum ați defini-vă declara structura pe care ați spune că tipul este ca numele parametrului chiar este foarte simplu.
Deci, în acest caz avem frați booleeni.
Siblicii returnează un boolean și ia doi parametri doi parametri struct.
Trebuie să identificați tipul structului care este o familie struct struct.
Acum, în C mai avansat, ai putea să faci un fel de paiete pe paie, iar Nimoy e altceva
și ai putea scurta numele aici.
Dar nu am vorbit despre ticălos.
Acest lucru ar fi probabil mai bun, dar acesta este într-adevăr modul în care ar trebui să faceți acest
lucru așa cum ar trebui să definiți întregul tip care este struct familia și apoi numele variabilei ca orice alt parametru.
Deci, aici treceți în parametrii membru membru dorit.
Sunt amândoi de tip familie struct.
Apoi, în interiorul funcției noastre, dacă vrem să accesăm membrii, accesăm membrii ca și cum ar dori un membru
normal.
Nu sunt indicatori, deci nu folosim liniuța și mai mult decât o facem doar pe indicatori, pentru că trebuie
să le dereferențăm pentru a vedea la ce îndrăznesc, pentru că nu sunt indicii pe care putem să
le facem.
Deci, membru al unui alt membru 2. mama membrul mamă și mama la mama mea sunt matrice de caractere astfel încât
să le putem trece și matricele de caractere sunt indicii în esență, astfel încât să le putem trece
la strt compara strt compare se va întoarce egal dacă sunt aceleași.
Deci, ceea ce facem aici este că verificăm dacă mama este membră
a unei mame și a celor două mame membre sunt aceleași și dacă
sunt, vom reveni la adevărat pentru că dacă ambele au același nume și asta ar fi ultima numele apoi frații lor destul de ușor de ușor
să treacă argumentele la funcțiile atâta timp cât declarația funcției are acel tip struct în lor.
Deci, aceasta funcționează din nou doi parametri, fiecare dintre care este o structură de tip de familie.
Ce-ar fi dacă vrem să avem indicatori la structuri ca argumente funcționale.
Și am menționat mai devreme că este mai bine să facem pentru că facem trecere prin valoare și vedem când
treceți prin copie de valoare.
Dacă aveți o structură care conține o mulțime de date o mulțime de structuri mari ca argumente,
trebuie să copiați totul în acea structură.
La funcția actuală.
Deci ar putea dura ceva timp pentru a copia aceste structuri mari.
Wolf ai un pointer.
Tot ce trebuie să faceți este să copiați adresa care este mult mai rapidă.
Astfel, indicatorii pentru structuri sunt utilizați ca parametri și funcții pentru a evita consumul de memorie și timpul
necesar pentru a copia toate structurile.
Acum, dacă aveți o structură mică, nu aveți mare lucru, dar cu siguranță doriți să utilizați indicii și structuri care
sunt mari.
Deci, în acest caz, ce mai faci, specificați în continuare numele tipurilor pe care
tocmai le-ați pus foarte simplu în fața datoriilor stricte.
Și dacă nu ai explicat de ce oricare dintre datele din structura de schimbare ai putea
folosi constanta înainte de tipul de structură dacă nu vrei ca adresa să se schimbe, ai
pune constanta după pointerul familiei struct.
Dar aici facem același lucru, dar acum o vom accesa diferit.
Pentru că acum că este un pointer trebuie să putem folosi linia mai mare decât acel simbol nou pentru a accesa.
În loc să folosim punctul, nu trebuie să folosim punctul aici, deoarece amintesc indicii trebuie să dereference pentru
că trebuie să puneți o paranteză care este mai multă sintaxă pentru dereferență indicatorul decât ar trebui să
puneți punctul în afara parantezelor deoarece are o prioritate mai mare.
Mult mai ușor de a utiliza liniuță și mai mare decât că și mama mai mare Dashon mai mare mama ambele
pointeri pot fi trecute în magazin compara dacă sunt aceleași întoarcere adevărat sau altfel return
false.
Destul de direct.
Puteți utiliza, de asemenea, modificatorul de costuri, dacă nu doriți să permiteți
modificarea membrilor structurii.
La ce se îndreaptă structura.
Apoi puneți costul înaintea indicatorului.
Ați putea pune și costul în fața familiei.
În acest caz, familia are de fapt un tip.
Deci, aici ar fi într-adevăr o familie construită sau o familie Konst pointer și apoi din nou x este
același mod în care nu modificați nimic, așa că ești bine să mergi compilatorii fără să
te plângi.
De asemenea, puteți utiliza un modificator de costuri dacă nu doriți să permiteți modificarea adresei în sine.
Orice încercare de a schimba aceste structuri va cauza un mesaj de eroare în timpul compilării.
Deci, aici ați spune steluță de familie și ați pus constantă după stea.
Și ceea ce spune asta este că nu poți schimba valoarea lui p.
Dreapta.
Adresa valorii pointerului care este o adresă.
Dar, din nou, acest lucru nu este foarte util, deoarece atunci când treceți prin valoare, de fapt treceți într-o
copie adresa.
Deci, acest lucru este redundant, nu trebuie să faceți acest lucru, dar puteți.
Și aici, din nou, doriți să puteți schimba adresa a ceea ce este membru P.
Și în acest caz tocmai accesați datele oricum vedeți dacă operatorul de interacțiune egal în fiecare
definiție de parametru este acum în fața cuvântului cheie
constant care asterisc.
Nu este în fața numelui parametrului.
Nu puteți modifica adresa stocată în pointeri, deoarece este după asterisc dacă era
în fața tipului de nume de parametru, atunci nu veți putea modifica ceea ce indică.
Dreapta.
Dacă avem acest operator de indirecție în fața numelui parametrului, ce ar face în constanta înainte de asta
ar însemna că doriți să puteți modifica ceea ce indică.
Asta spune adresa.
Deci, nu puteți modifica adresa stocată în indicii, este indicii care sunt
protejați aici, nu structurile pe care le indică la fel ca Consta și alți parametri ai pointerului.
Nu există diferențe în ceea ce privește loviturile.
Dacă doriți să returnați o structură dintr-o funcție care este un pointer, prototipul funcției trebuie
să indice această valoare de returnare în mod normal în declarație.
Deci, aici ar trebui să spuneți astăzi structura.
Pointerul meu pointer distractiv nu contează.
Acesta este un prototip pentru o funcție care nu ia argumente care să returneze structura tipului D foarte
ușor de returnat dintr-o funcție.
Și ce face această valoare.
Acum putem returna mai mult de un element sau un element de date dintr-o funcție.
Dacă vă întoarceți un struct, ați putea reveni la 10 valori de 10 elemente de date diferite.
Cât de cool este că poți.
Stru permite să returnați mai mult de o funcție.
Foarte foarte valoros.
Deci este adesea mai convenabil să returnați un indicator la o structură, spre deosebire de structura.
Când întoarceți un pointer la o structură este creat pe halda OK, deoarece toate pointerii sunt create
pe heap.
Asta înseamnă că va fi cam mai lung.
Și acest lucru înseamnă că îl puteți șterge în administrare în momente arbitrare.
Deci, în acest exemplu, creăm o structură denumită fonduri care conține un caracter numit bancă conține
un dublu alt caracter numit salvat dintr-o lungime distractivă particulară doar lungimea este egală cu
50 și apoi are o salvare dublă una.
Avem o funcție numită sumă care ia această structură ca parametru și tot ceea ce facem este
în interiorul căreia ne-am întors o bancă de la prima structură plus fondul de salvare și asta va returna suma pe care o
are în bancă.
Acum ne întoarcem în acest exemplu, unii sunt doar dublu, nu ne întoarcem un pointer.
Doar luăm un indicator ca parametru.
Și, prin urmare, funcția noastră principală este crearea unei variabile de structură numită Stann de tipul fondurilor de acțiuni sau inițializare
și cu unele valori și apoi vom scoate din totalul de a suna unele.
Și tocmai am trecut o structură ca și cum am trecut orice variabilă.
Nu trebuie să dereferență, nu este un indicator.
Nu trebuie să facem nimic deosebit.
Noi doar ne asigurăm că declarația funcției pe care o avem de tipul structului de acolo, dar orice altceva ar arăta memento-urile
de
cuplu normale pe care le-am menționat mai devreme că ar trebui să folosiți întotdeauna indicii atunci când treceți
structurile unei funcții.
De ce.
Deoarece amintiți-vă că versiunile mai vechi ale lui C nu au permis, nu permiteți transmiterea structurilor, dar permit
indicii.
Deci, puteți evita orice fel de compatibilitate înapoi dacă utilizați o versiune mai veche
a programului dvs. va funcționa.
Deci doar trecerea în acea singură adresă este, de asemenea, mai eficientă din cauza timpului și a copierii.
Dar dacă faceți acest lucru dacă treceți printr-un parametru care este un pointer la o structură interioară a
funcției, acesta are mai puțină protecție pentru datele dvs.
Deci, unele operații în funcția chemată ar putea vreodată să afecteze în mod accidental datele
din structura originală.
Și aici vă doriți să utilizați calificativul Konst.
Dreapta.
Și ai folosi Const înainte de tipul real.
Nu după asterisc și înainte de numele parametrului, înainte de tip, avantajul structurilor care trec este
argumentul.
Funcția funcționează cu copii ale datelor originale.
Este mai sigur decât să lucrați cu datele originale.
Deci, asta e singura dată când vrei să treci o structură ca argument.
Acesta nu este un indicator în stilul de programare tinde să fie un pic mai clar.
Principalele dezavantaje ale structurilor de trecere ca argumente, spre deosebire de trecerea unui pointer structurat ca
argument, este că implementările mai vechi ar putea să nu manipuleze codul.
Ea scapă timp și spațiu și sunt modalități speciale pentru că atunci când aveți structuri mari trebuie să
facem o mulțime de copiere pentru fiecare membru.
Așadar, țineți minte acest lucru, în cea mai mare parte pe care doriți să-l transmiteți în indicii către
structuri, mult mai eficient și economisiți timp.
Programatorii folosesc indicatorii de structură ca argumente funcționale din motive de eficiență și folosesc constanta atunci când este
necesar și aceasta este combinația pe care doriți să o faceți dacă sunteți îngrijorat de protecție.
Doar utilizați pointerul de funcție pentru eficiență și apoi utilizați concertul.
Deci nimic nu se încurcă în interiorul funcției.
La fel ca indicii cu adevărat normali sunt mai mult sau mai puțin, dar cu indicatori este și mai important
cu eficiența datorită structurilor mari care traversează structuri prin valoare este cel mai adesea făcut pentru structuri care sunt mici și
care sunt genul de reguli pe care doriți să le gândiți OK pentru a trece o structură.
Acesta nu este un pointer, atâta timp cât este mic împotriva unor concepte importante legate de structuri
și trecerea pointerilor ca parametri argumente și returnând indicii, de asemenea.
Acum putem începe să implementăm o parte din acest lucru.
Oferim multe exemple.
Înțelegem conceptele pe care le înțelegem sintaxa.
Acum vreau să vă prezint câteva provocări care, pe măsură ce Ahaz faceți acest lucru,
ați memorat sintaxa.
Acum, dacă vreți să creați o structură în program, știți cum să o faceți cum ar fi partea din spate a mâinii.
Deci, vom avea câteva provocări în următorii noștri doi oxeri pentru a vă familiariza cu toate
lucrurile despre care am vorbit despre structuri.
Mulțumesc.