Bună ziua și bun venit înapoi această prelegere Vreau să vorbesc despre cazul de utilizare pentru indicatori atunci când le
vom folosi cum le vom folosi.
Știm cum să le creăm pentru a le clarifica și a le defini.
Știm cum să atribuiți o adresă cu variabile existente acestora folosind adresa operatorului și știm cum
să le dereferențăm cum să obținem valoarea pe care indicatorul le indică.
Acum, cum să începem să le folosim.
Deci, C oferă câteva operații de bază pe care le puteți efectua pe pointeri pe care le puteți atribui o
adresă la un pointer despre care am învățat deja.
Aceasta este o variabilă existentă.
Variabila are o adresă și tocmai vă uitați la acea adresă de variabile utilizând adresa operatorului.
Și avem un punct dacă am putea atribui pointer existent la un alt pointer, care este
două moduri în care puteți atribui o adresă unui pointer, astfel încât acesta să poată fi un nume de matrice de la sine.
Nu am vorbit încă despre machete, dar când semnați matricele pentru a indica tot ce trebuie să specificați numele.
Nici măcar nu trebuie să utilizați adresa operatorului.
Până acum, ne-am concentrat pe utilizarea unei variabile existente și trecând la adresa variabilei în sine.
Dar cele trei modalități pe care le puteți face sunt menționate acolo.
Puteți, de asemenea, dereference un pointer și tocmai am învățat despre asta.
Acolo folosiți trucul operatorul de indirecție.
Aceasta vă va oferi valoarea stocată în pointer la valoarea pointerilor indicatorului, care este o adresă
la care indică punctul.
Doar folosiți asta.
De asemenea, puteți lua o adresă indicatoare.
Aceasta este adresa reală a indicatorului.
Când creați pointerul unde este afișat pointerul însuși, puteți utiliza și adresa operatorului
pe acest indicator.
Și puteți, de asemenea, să efectuați aritmetica pointerului, vom avea o prelegere separată în acest sens.
Aici puteți folosi parcelele și operatorii minus pentru a adăuga numere întregi pentru a desemna sau a
scădea numere întregi de la un pointer.
Și acest lucru vă permite să aveți notație specifică și vă permite să sari în jurul valorii de
memorie mai repede mai ales dacă utilizați arrays.
Deci, ceea ce faceți în mod obișnuit este atunci când adăugați un număr întreg la un pointer
folosind OPERATORUL plus. Va seta doar adresa acelui indicator la atâtea octeți.
Dacă scadeți un număr dintr-un pointer, acesta va seta această adresă în minus un
anumit număr de octeți.
Puteți, de asemenea, documentul Inkerman de unul și veți vedea că acest lucru este foarte comun când îl folosim într-o cursă.
Deci, atunci când sunteți într-o matrice și doriți să vă deplasați la elementul următor în loc să utilizați indexul, puteți utiliza
un indicator și doar o puteți crește cu unul dacă doriți să treceți la elementul anterior, în loc
să folosiți un index.
Puteți doar să le punem pe un punct printr-un aritmetic pointer.
Vom vorbi exclusiv, dar asta este ceva ce poți face cu indicii.
Și din nou este o notație specială care vă permite să vă deplasați repede în memorie, pentru a fi mai eficientă.
De asemenea, puteți găsi diferența dintre două indicii.
Deci, dacă aveți două indicii și elementele sunt în aceeași matrice pe care doriți, poate
doriți să aflați cât de departe sunt elementele pe care le puteți scădea.
Aceasta ar fi diferența dintre doi indicatori și așa că, dacă indexul 5 și apoi ați avut un
indicator indicând indexul 5, ați avut un altul indicând indicarea indexului 15.
Ai putea să le minusi și asta ți-ar da cât de multe elemente există, pentru că ar
fi adresa hexazecimală minus cealaltă X nu contează.
Deci, atunci când arrays în memorie contiguu care este ea va arăta cât de departe sunt ei, puteți utiliza operatorii
relaționali pentru a compara valorile a două pointeri.
Indicatorii trebuie să fie de același tip, astfel încât, dacă ambele indică și folosesc ambii trebuie să fie același tip.
Aceasta va spune doar dacă adresele sunt mai mari decât sau mai puțin
decât ați reușit să identificați cât de departe în ce parte a matricei sunteți.
Există, de asemenea, două forme de scădere. Deci, ați vorbit despre scăderea unde puteți să luați de
fapt un indicator și să-l scăpați de altul, care va primi un pointer sau puteți scădea un indicator de la un număr întreg, care vă va da indicatorul
drept astfel încât să scadă un punct sau de la altul pentru a obține un număr întreg sau pentru a scădea un număr
întreg de la un pointer pentru a obține un pointer.
Acestea sunt cele două cazuri, așa că vom păstra în acea mină vom trece prin mai multe exemple.
Aveți grijă atunci când utilizați incrementarea sau documentația indicatorilor și provocați o matrice, astfel încât majoritatea acestor
lucruri pe care le faceți cu aritmetica pointerului este atunci când aveți atunci când lucrați
pe agende, deoarece din nou vă permite să vă mutați rapid.
Este o sintaxă simplă, dar nu uitați că matricele au o eroare în afara limitelor.
Deci, dacă creșteți prea mult, veți ieși din limitele din tablă, dacă
documentați prea mult, veți avea un sub-sub limite.
Mergeți la un număr negativ.
Calculatorul în sine nu va urmări dacă indicatorul încă indică un element de matrice.
Deci, folosind aritmetica pointer pe array trebuie să fii atent
dacă vrei să folosești pointerul în expresii.
Puteți face și asta.
Am vorbit despre acest lucru un pic mai devreme și am făcut-o.
Dereferențăm indicatorul când adăugăm 15 și cred că avem 20 de ani.
Deci, atunci când valorile ruffs de pointer pot fi folosite în expresii aritmetice.
Deci, dacă o variabilă este definită ca fiind un pointer de tip la întreg, atunci ea este
evaluată folosind regulile aritmetice întregi și vom arăta că cu o dereferență.
Deci, dacă aveți o variabilă și aveți un pointer inițializat la cunoaștere, atunci semnați indicatorul dvs. pe
care se adresează variabilele.
Poți să spui doar numărul stoppie plus egal cu douăzeci și cinci de membri ai numărului stoppie obține valoarea la
care se îndreaptă.
Ceea ce face acest lucru este să spună că valoarea p este egală cu valoarea p, plus 25.
Așa că valoarea va fi egală cu 35, aceasta nu schimbă ceea ce indică, deoarece cuvântul folosim un
asterisc, deci nu schimbă adresa pe care o îndreptăm.
Nu schimbă adresa însăși deoarece nu avem adresa operatorului.
Schimbăm valoarea pe care o indică.
Așadar, crescând valoarea numărului cu 25, steaua indică faptul că accesați conținutul cu numerele de numere verbale numite indicând dacă un
punct indicator sau X verbal că pointerul a fost definit ca fiind un pointer la același tip
de date ca X dreapta .
Deci, dacă creați un pointer final un pointer Floy puteți avea doar o adresă cu un tip de date
care este floater și în funcție de care ați declarat Deci, utilizarea utilizării operatorului de indirecție în expresie este
identică cu utilizarea lui x în aceeași expresie și asta e tot ce spun că
este dacă folosiți un flux sau dacă aveți un int și utilizați operatorul de indirecție pe care îl dereferențiați.
Puteți face tot ce puteți.
Dacă ați avut un flotor sau orice
indică o variabilă definită ca un pointer la un int poate stoca adresa oricărei variabile de tip în.
Noi stim aia.
Deci, aici, în devalorizat 99, putem să atribuim că nu este numărare atâta timp cât numărul este un pointer la un int și apoi
putem adăuga la acesta.
Instrucțiunea va funcționa cu noua valoare variabilă.
Aceasta este noua valoare variabilă, iar valoarea nouă a constantelor va fi 10:24 numerele drepte indicând
valoarea adresei valorii, astfel încât dacă schimbați indicatorul,
punctul indicelui la valoare vor modifica valoarea acestei valori variabile.
Așa că amintiți-vă că acesta este costul schimbării unei variabile într-un singur loc al pointerului și îl
modificați în mai multe variabile.
Un pointer poate conține adresa la orice variabilă de tipul corespunzător.
Deci, puteți utiliza o variabilă a indicatorului pentru a modifica valorile mai multor variabile diferite dacă
acestea sunt duble sau duble sau plutesc atâta timp cât acestea sunt de tip compatibil cu tipul de pointer.
Puteți schimba acest lucru, dar nu puteți modifica valoarea numerelor dacă numerele P indică un flux și valoarea este
un număr întreg.
Vrei să fii capabil să faci că ai avea exemplul notter al compilatorului aici.
Aici vom să vă arătăm cum să obțineți adresa unei variabile așa că aici în
acest principiu Facem o aritmetică a indicelui cu privire la expresiile reale.
Deci, nu facem nimic pe array, astfel încât să nu creștem sau să documentăm indicii NESA că
documentăm valori.
Așadar, avem două conducte lungi pe care vreau să le numesc două și apoi avem
un pointer de tip lung, am inițializat nulul pe care îi atribuim adresa unuia pentru pointerul nostru pointer și apoi atribuim valoarea lui PNM lui L.
Așa că înseamnă că nimeni nu va fi acum pentru a fi dacă nu ne anchoram acum nici unul, de fapt nu v-am făcut nimic
pentru tine.
Deci, valoarea Pina acordând un omagiu pentru tot ceea ce înseamnă că valoarea unuia este L L este doar un sufix
pentru a indica că este de-a lungul timpului dacă acum creștem lungimea amorțită la valoarea ei este zero.
Va fi un L dacă nu spunem doi plus egal cu stelele numb PNM este la L.
Deci va fi altul pentru L.
Numărul doi va fi acum egal cu 3 l.
Și atunci dacă îi atribuim adresa numărul doi PNM va fi acum egală cu cea a numărului
doi.
Deci, dacă ne ancora pe Pina, dar ne îndreptăm atenția asupra faptului că nu vom avea 4 El drept și vom examina acest
lucru și în interiorul blocurilor de cărbune.
Dar te-am prins.
Nimeni nu va fi egal cu Al Al.
Numărul doi va fi egal cu indicarea arahidelor.
3L Deci cred ca va fi 3L PNM va fi 3L si apoi nonplus Numarul doi va fi de 6 astfel.
Așadar, să vedem dacă am dreptate să trec prin asta în blocuri de coduri de unde suntem în blocuri colorate încercat
să trecem prin asta manual, dar acum vrem să vedem dacă avem dreptate și am putea folosi
de fapt să folosim depanatorul vom pune acest lucru aici și vom vedea când vom trece prin programul de
schimbare a valorilor.
Așa că completați acest lucru permite mingea să obțină.
Aceasta va începe și se va opri la 10 ani.
Și dacă aducem fereastra de ceas pe care o putem face prin depanarea în ceasurile Windows, putem vedea valorile așa cum se
întâmplă acum, așa că nu este zero Nahm la zero.
Pnm arată că nu.
De aceea, 0 0, deoarece știm că nu reprezintă zero pe Peeno și putem folosi asta atunci
când comparăm dacă declarațiile.
Așa că, după ce vom executa ca 10 Peeno, ar trebui să aibă acum adresa de numărul unu.
Deci, hai să
trecem acum Peeno are o adresă reală 0 x 6 0 5 0 8 după ce executăm linia 11 vom spune că valoarea lui PNM este
egală cu 2L și nu vom fi de acțiune să vedem nimic în fereastră de ceas pentru asta, dar hai
să intrăm și să o executăm.
Mai am aceeași adresă.
Nimeni nu este schimbat acum, pentru că PNM a avut adresa și am schimbat.
Deci, acum cineva trebuie să se înscrie în linia 12, vom crește câte două.
Așadar, numărul doi va deveni unul.
Va fi o singură citație.
Acum vom adăuga la amortit la orice PNM a fost PNM numerele indicând la unul.
Deci ar trebui să fie numărul doi ar trebui să fie trei, atunci
vom merge la 14.
Numărul doi este de trei.
Acum, eu încă mai sunt în linia 15, vom semna o nouă adresă cu numărul doi.
Deci după asta nu mai suntem 6 0 0 8 ai lui Xerox 0 6 0 0 4.
Deci, acum, dacă vom crește valoarea pe care Pinos indică că este numărul doi și numărul doi este de trei.
Numărul doi ar trebui
să fie acum înainte și vom vedea că pentru moment vom tipări toate aceste valori și veți vedea
valoarea unei persoane care ar trebui să fie la valoarea numărului doi ar trebui să fie pentru PNM indică numărul doi.
Deci, ar trebui să fie pentru încă și apoi vom spune genomul valoare care este de patru plus nu 2 care este de 4 ar
trebui să fie de 8.
Aș putea să fi fost cu șase.
Deci acum nu vom putea vedea asta în fereastra de ceas, așa că hai să o
jucăm și să vedem ieșirea ca declarații Pranav pe care ar trebui să o vedem 2 4 4 8.
Deci, haideți să rulam acest mod de depanare non-HD și vedem 2 4 4 8.
Așa că mergem.
Sper că a avut sens.
Să ne întoarcem și să continuăm discuția noastră.
Deci, când vom primi informații despre modul în care putem folosi indicii în acest fel.
Deci, până când folosim Scan F pentru a introduce valorile trebuie să folosim operatorul ampersand ori de câte ori avem un tip de
date inter-flux, singura dată când o avem este atunci când avem o matrice de caractere.
Iar motivul pentru asta este faptul că personajul este de fapt un indicator al
caracterului despre care vom vorbi, dar dacă folosim Scan F pentru a introduce valori și le folosim pe tipuri normale de date care nu sunt personaje pe
care trebuie să le avem întotdeauna utilizați acest add sau rezolvați OPERATOR dreapta.
Iar motivul pentru care este scanat Efes al doilea argument este un pointer.
Așa că trebuie să trimitem și adresa pointerilor să aibă doar valori ale adreselor corecte.
Deci, când aveți un pointer care conține deja o adresă, puteți utiliza numele pointerului
ca argument skandha.
Deci, acum nu trebuie să utilizați operatorul ampersand dacă sunteți într-adevăr creat un pointer, deoarece al doilea
argument adresa a doua la scanarea f este un pointer.
Și așa puteți spune pointerul.
Așadar, în trecut sau în trecut, întotdeauna dacă am vrea să stocăm o valoare în valoare, am avea valoarea ampersand
în argumentul celui de-al doilea semestru.
Dar dacă avem un pointer pe care îl creăm și acesta indică deja o adresă,
așa cum se întâmplă în exemplul său, atunci când folosim Scan f, tot ceea ce trebuie să spunem este numele valorii numelui indicatorul.
Iată un caz atunci când avem un număr întreg, dar nu trebuie să folosim ampersand pentru că avem un pointer la
un număr întreg.
Spunem doar procentul de valoare d p.
Deci, există și alte momente în care puteți trece în nume obișnuit de variabile pentru a scana matrice de caractere
B de dimensiune.
Dacă aveți
un pointer, puteți imprima și ceea ce au intrat ulterior și veți observa că valoarea va fi de fapt
schimbată la ceea ce au intrat, deoarece îndreptăm atenția spre
testarea adresei pentru nr.
Există o regulă pe care trebuie să o arzi în memorie.
Acest lucru este foarte important.
Am vorbit despre dereferencing Dar ce se întâmplă dacă dereferență și pointer neinitializat un punct care
indică la nimic sau pointer care nu are memorie alocată pentru ea.
Deci, dacă facem ceva de genul acesta, declarăm un pointer, dar nu l-am inițializat niciodată și
apoi încercăm să îi atribuim o dereferență pe care o atribuim.
Aceasta este o mare greșeală.
Deci, a doua linie înseamnă în esență că doriți să stocați valoarea 5 în locația la care punctele
P-T pentru a pune Peetie nu indică nimic pentru că nu a fost inițializată.
Deci, P-T va avea acum o valoare aleatorie, deci nu știm unde să fie plasate 5.
Ar putea fi plasat oriunde în memorie.
Acest lucru ar putea fi inofensiv deoarece ar putea suprasolicita datele existente sau variabilele de stare existente în programul dvs.
Este posibil ca programul să se prăbușească.
Este foarte problematică.
Deci, atunci când creați un pointer și alocați memorie pentru a stoca pointerul în sine, acesta nu alocă memorie pentru
a stoca datele corect.
Prin urmare, spunând în start P-T că a alocat memoria pentru pointer, dar nu a alocat nici o
memorie pentru valoarea indicelui.
Indicatorii adresei de membru conțin adrese.
A creat pointerul, dar nu a creat nici o memorie pentru ceea ce indică să scrie, astfel
încât să nu îl poți referi.
Deci, nu alocă memorie pentru a stoca datele înainte de a utiliza un pointer.
Ar trebui să fie semnat o locație de memorie care a fost deja alocată.
Dreapta.
Sau trebuie să utilizați alocarea dinamică a memoriei utilizând malloc despre care vom vorbi.
Deci, fie atribuiți adresa unei variabile existente pointerului, fie folosiți malloc, care este
alocare dinamică Merrilee.
Dar păstrați asta în minte atunci când utilizați un indicator dacă nu ați făcut-o dacă ați creat-o și a fost nulă pe care doriți să o verificați pentru
toate înainte și vom vorbi despre ea într-o secundă, dar dacă ați creat un pointer nu a fost
" t inițializat.
Nu atribuiți nimic dacă nu orientează la o altă variabilă inițializată în acest
fel sau dacă are o memorie alocată.
Deci aici este locul unde romanul intră în joc.
Puteți încerca, de fapt, să nu vă asigurați că nu aveți o dereferență sau asigurați-vă că
programul nu se prăbușește.
Deci știm deja că Knol indică practic nimic în care ar trebui să inițializăm toate variabilele noastre sunt indicii pentru a ști
așa încât ar trebui să facem întotdeauna ceva de genul asta.
Amplasează un simbol special C care reprezintă pointerul echivalent cu zero cu numere obișnuite.
Mai jos, se stabilește un pointer la NULL folosind zero, astfel încât să putem, de asemenea, dacă nu vrem să-l treci sau să-l semneze
și tot ce putem spune doar zero.
Și asta echivalează cu a spune că nu arată nimic, deoarece nu este clona de 0.
Dacă doriți să testați dacă valoarea p este tot ceea ce puteți face ca utilizarea
testelor explicite, puteți spune că pointerul este egal cu null și dacă pointerul este egal cu null, înseamnă că este zero, atunci puteți face de
fapt ceva, dacă nu este zero sau nu este nul .
Adevarata sau orice alta valoare.
Aceasta este o modalitate de a verifica dacă nu au avut loc accidente.
Asigurați-vă că, înainte de a încerca să dereference ceva care acest lucru vă va spune
dacă are sau nu memorie alocată.
Deci, doriți să verificați acum înainte de a lăsa acel pointer și de multe ori faceți acest
lucru în funcții deoarece funcțiile vor lua parametru va lua indicii ca parametri și în cazul în care apelantul este trecând în date rele sau trecerea
unui pointer nu are nici o memorie alocat.
Acesta ar putea să vă prăbușească codul, așa că ceea ce doriți să faceți este să doriți să vă asigurați că apelantul are o
adresă validă, astfel încât să îl puteți verifica pentru NULL.
Practic, ceea ce înseamnă că întotdeauna trebuie să aibă aceste dacă verificările să nu spună valoarea P sau nu
POINAR și dacă nu este POINAR, atunci puteți dereferența.
Vorbim foarte mult despre pornografie, așa cum am discutat destul de puțin.
Sunt sigur că e puțin copleșitor.
Poate doriți să faceți o pauză și să treceți prin prelegerile anterioare.
Încearcă să scufunzi cu adevărat acest concept în pointerul tău, doar să ai adrese.
Dar sunt trei părți la care poate ajunge.
Poate deveni problematică, dar rămâne pozitivă.
Păstrează-te mereu cu mine și știu că este confuz.
Știți că am vorbit despre lucrul cu adresele despre care am vorbit despre
lucrul cu valorile pe care le-am vorbit despre lucrul cu pointerul însuși și am vorbit despre lucrul cu variabilele
care indică pointerul astfel încât sunt toate lucrurile pe care le aveți să-și amintească și poate fi foarte copleșitoare și frustrant.
Și nu este întotdeauna greu să încerci să-ți dai seama ce se întâmplă și va dura multă practică.
Cea mai bună modalitate de a înțelege acest concept și tot ceea ce am vorbit până acum este de a practica scrierea
programelor scurte care utilizează toate conceptele pe care le-am menționat.
Așadar, scrieți un program care primește valorile utilizând numele.
Știți că aceasta ar putea fi folosirea programului de dereferențiere a operatorului de
indreptare care scanează valorile folosind indicii.
Deci, aceasta ar fi direcționată spre obținerea valorilor folosind indicii care doar sunt numele
pointerului care ar fi adresa de imprimare a adreselor.
Am căutat toată sintaxa.
Practicați aceste lucruri mereu și repede.
Așa vei face bine.
Trebuie să vă încredeți în siguranță și trebuie să studiați aceste concepte în detaliu pentru a le stăpâni.
Încă mai vorbim despre imprimante, dar poate că ar fi un moment pentru a merge mai departe și pentru a trece peste ceea
ce am vorbit până acum, astfel încât să fie forată în capul tău.
Mulțumesc.