Bună ziua și bun venit și această prelegere vreau să vorbesc despre aritmetica pointer.
Acum, că înțelegem relația dintre matrice și indicatori, acest concept va
fi mai ușor de înțeles, spunem aritmetic, dar nu într-adevăr.
Tot ce inseamna cu adevarat este ca poti face plus sau minus sau incrementare sau documentatie pe un pointer
in sine.
Deci, puterea reală de a folosi pointeri la matrice intră în joc când doriți să secvenți prin
elementele unui matrice.
Vrei să mergi de la primul element la sfârșit.
Vreți să le repetați.
Aceasta este puterea reală a pointerilor deoarece indicatorii folosesc adresele în matrice.
Fiecare element din matrice este doar o altă adresă.
Deci, puteți face plus plus pe indicatori și puteți merge la următoarea adresă.
Deci, aici sunt valori POINAR pot fi folosite pentru a accesa primul în pericol de matrice valori care pot fi
folosite pentru a accesa valoarea Sub-Zero.
Deci, dacă vă amintiți valorile, pointerul este un pointer care indică o matrice integeră și am atribuit-o
aceluia la primul element din matrice prin atribuirea indicatorului uraniului.
Am putea folosi și adresa operatorului Sub-Zero dacă vrem.
Dar, atunci când dereference valorile pointer, deoarece este pointer la primul element
matrice va da primul intreg în valoarea Sub-Zero matrice.
Dacă v-ați dorit să vă referiți la valorile lui 3 prin variabila indicatorului, tot ce trebuie să faceți este să adăugați trei
la pointerul de valori și apoi să aplicați operatorul de indirecție pentru a dereferența.
Deci ai putea să faci ceva de genul ăsta.
S-ar putea spune valori pointer plus trei și apoi dereference-l cu Astra puteți pune, de obicei, gastric
în afara de citate pentru a clarifica bine ce face acest lucru se spune valori POINAR, care este
o adresă a primului element în matrice.
Ea adaugă 3 la ea.
Și așa va adăuga de fapt pentru fiecare octeți pentru întregi.
Se va multiplica octeții ori pe întregi.
Dar acest lucru va duce, în mod esențial, la cel de-al treilea sub-al treilea element al matricei.
Deci, în expresia asteriscului valorile pointer Plus II care pot fi folosite pentru a accesa orice valoare
conținută într-o matrice de valori.
Deci, dacă înțelegeți această expresie, puteți adăuga ceva.
Vă voi îndruma către o anumită matrice El-Amin.
Deci, dacă doriți să setați valoarea subtend de 27 Tot ce trebuie să faceți este dacă utilizați un pointer este spune valori
indicatorul plus 10 și apoi dereference și spuneți egal 27.
Deci, vedeți diferitele erori de sintaxă în comoditatea notației, dar este și mai eficientă în ceea
ce privește programul în sine.
Așadar, pointerile pentru că ele sunt atât de strâns legate de arrays puteți accesa cu ușurință elementele
prin incrementarea decrementarea pointeri sau adăugarea de valori sau scăderea valorilor de la un pointer foarte foarte util pentru a stabili valorile pointer la
punctul la al doilea element al matricei de valori.
Puteți aplica operatorul de adresă la valori ale unuia dintr-un rezultat sinusoidal pentru a stabili valorile unor indicatori de valori.
Am văzut asta.
Aceasta este doar o altă modalitate de a face același lucru pe care l-am menționat mai devreme dacă doriți
să utilizați adresa operatorului.
Puteți face întotdeauna acest lucru dacă doriți, dar este mult mai convenabil să faceți pointer aritmetic dacă valorile indică
puncte la valori de 0.
Puteți stabili la valorile punctului unu prin adăugarea pur și simplu la valoarea indicatorului de valori.
Și asta este cu adevărat ceea ce ne întâlnim cu aritmetică la colț.
Tot ce trebuie să faceți este să spuneți că valorile punctului plus sunt egale cu 1 și
acum indică indicii indicând al doilea element din matrice sau primul index.
Foarte foarte frumos notație foarte ușor de făcut.
Deci, aceasta este perfect o expresie perfect valabilă în C și poate fi folosită pentru indicatori la orice tip de date, indiferent dacă este
vorba de un caracter întreg sau de orice altceva.
Și probabil că ar trebui să te gândești cât de utilă poate fi în caractere pentru un pointer de caractere.
Acum puteți accesa fiecare element pentru fiecare caracter dintr-un șir, făcând un plus plus pe un indicator, operatorii Duckman increșiți plus plus și
minus minus sunt folosiți în mod special pentru a face față acestor indicatori deoarece, de
obicei, doriți să treceți de la un element la următorul și așa mai departe.
Nu este așa cum nu este atât de comun să adăugați 20 de l la 22 sau minus 20, deoarece de obicei mergeți în ordine.
Așa că utilizarea Inkerman a funcționa într-un colț are același efect ca adăugarea unei utilizări a indicatorului pe care acel
operator o are același efect ca și scăderea unuia de la pointer.
Așa că spunând plus plus valori indicatorul va stabili indicatorul de valoare indicând
adolescentul următor în matricea valorii minus minus ar trebui să fie valori.
Pointerul va seta punctul de valori indicând întregul anterior din matricea valorilor.
Dar vrei să fii atent atunci când mina este a mea pentru că nu vrei să te
asiguri că ești cel puțin în matrice și nu ești la zero și același lucru este valabil pentru plus plus dacă
ești la sfârșit a matricei pe care nu doriți să aveți erori la limită.
Așadar, asigurați-vă că valorile pointerului, dacă documentați, nu indică inițial începutul
matricei de valori.
Un alt exemplu de an, în care vom însuma efectiv toate elementele din tabel.
Vedeți că avem o funcție de sumă a matricei și funcția are o matrice și de
asemenea are un număr constant constant ca parametri în interiorul funcției.
Vom crea un număr întreg.
Vom inițializa numerele întregi la zero și vom crea un pointer întreg cu
un pointer de tip int.
De asemenea, vom crea un pointer constant.
Deci, ce inseamna ca nu poti schimba adresa.
Va fi întotdeauna array plus și va fi numit matrice și facem acest lucru pentru că
face bucla noastră mai eficientă dacă am setat-o ​​pentru a merge la matrice și doar uită-te la pointer
astfel încât array Iranul indică la adresa sfârșitului matricei.
Putem spune că matricea este cea care a trecut și apoi are dimensiunea dimensiunii matricei.
Acum, buclă pentru se va inițializa pointerul de variabilă a controlului buclă, care este un pointer la matrice, așa
că va merge și tot ce trebuie să faceți este dacă doriți să atribuiți un matrice
primului element.
Sau atribuiți un pointer primului element al unei matrice.
Tot ce trebuie să faceți este să spuneți că pointerul este egal cu matricea și apoi o buclă o condiție
este dacă indicatorul este mai mic decât sfârșitul drept Amintiți-vă că un pointer este o adresă un capăt de matrice este, de asemenea, o adresă.
Așa că spunem că la adresa pointerul este mai puțin decât pointerul și apoi vrem
să executăm corpul pentru a scrie pointerul de buclă este doar un număr întreg este o adresă hexazecimală.
De fiecare dată când o incretimăm, merge la următoarea adresă.
Avem adresa, așa putem spune. Mergeți prin bucla până când ajungem la capăt și apoi creștem pointerul
însuși, care va crește adresa pentru a merge la următorul element din matrice, în esență, pentru că asta
este ceea ce indicăm la.
Apoi avem un corp în bucla noastră, spunem că suma plus este egală cu indicatorul că dereferențăm pointerul
pentru a obține valoarea deoarece amintim că vrem să obținem valoarea pe care
nu dorim să o obținem adresa indicatorului sau a indicatorului sau adresa indicatorului indică și apoi la sfârșitul sumelor returnate.
Deci, aceasta va însuma toate elementele dintr-o matrice.
Veți observa în principiu De asemenea, am făcut o declarație a funcției acolo, spre deosebire de partea de sus a fișierului pe care
doriți să o puneți în partea de sus a fișierului.
Dar în principiu vom crea o serie de 10 elemente 3:07 negative 9 și așa mai departe.
Apoi trecem în matrice sau într-o melodie și specificăm dimensiunile 10.
Și ceea ce veți observa este că returnează valoarea care este suma matricei.
Deci, este foarte frumos să folosiți această aritmetică pointer pentru a itera printr-un matrice.
Putem doar plus plus de la următoarea adresă și, de asemenea, uită-te la adresa pentru a sari cum acest lucru este mai
eficient cu pointer uita la adresa de terminare, spre deosebire de un contor privirea la mai puțin de n.
De asemenea, observați că le purtăm constante deoarece conceptele nu se schimbă și este
mai eficient cu compilatorul.
Matricea aici este un pointer constant, ceea ce înseamnă că adresa nu se poate schimba.
De asemenea, ar fi trebuit să observi în acest exemplu că pentru a trece un matrice la o funcție pe care o ai în spațiu
pur și simplu specificați numele matricei.
Dreapta.
Deci, știm ce este o expresie de acces a funcției și de a produce un pointer la o matrice.
Trebuie doar să specificați numele matricei.
Dreapta.
Am văzut că atunci când atribuim primul element al matricei unui pointer.
Deci, ceea ce implică acest lucru este că apelul la o anumită matrice funcționează ceea ce a fost transmis
funcției a fost de fapt un indicator al valorii matricei.
Și acest lucru vă spune cu adevărat că matricele și indicii sunt foarte strâns legate de faptul că o
matrice nu este altceva decât un pointer.
Și acest lucru explică de ce puteți schimba elementele unui matrice din cadrul unei funcții.
Corect, pentru că până la acest punct când transmiteți date unei funcții, datele nu se schimbă în afara acelei
funcții, cu excepția cazului în care este un dreptator, pentru că de aceea trebuie să trecem și chestiile
pentru scanner.
Dacă singura modalitate prin care elementele se schimbă în afara unei funcții este dacă treceți pointerii la o funcție
și deoarece elementele sunt modificate în interiorul acelei funcții.
Aceasta presupune că treceți un pointer și acest lucru demonstrează din nou că atunci când matricele și
indicii sunt foarte asemănătoare, matricele sunt într-adevăr pointeri folosind doar o sintaxă diferită.
Vom vorbi despre modul în care putem trece prin trimitere sau într-adevăr să transmitem o copie a unei referințe care vă
va permite să schimbați datele dintr-o funcție în afara acelei funcții.
Dacă vă amintiți de una dintre provocările noastre anterioare ori de câte ori am vrut să schimbăm datele într-o funcție,
trebuia să folosim o variabilă globală.
Pentru că nu am înțeles conceptul de trecere prin referință și nu am înțeles
conceptul de pointeri.
Dar am menționat mai devreme că unul dintre avantajele indicatorilor este că acum puteți schimba datele din interiorul
unei funcții.
Se va reflecta în afara acestei funcții, dar aceasta este o altă prelegere.
Dar acel concept în sine din cauza exemplului precedent demonstrează modul în care matricele
sunt în esență pointeri.
Deci, s-ar putea să te întrebi de ce parametrul de model formal din interiorul funcției nu este declarat a fi un pointer.
Poate că am putea face ceva de genul interfeței.
În vechime nu trebuie să declarem ca o matrice.
Este perfect valabil deoarece tablourile și indicii sunt aceiași pe care putem să le spunem în matricea Star.
Menționează că sunt foarte apropiați.
Deci, puteți declara un tip de tip array pentru a fi un tip de evenimente
de matrice în cadrul unei anumite funcții a matricei sau puteți să-l declarați drept un indicator pentru acesta și
de aceea vedeți multe funcții care, cu excepția câmpurilor ca parametri, sunt ca argumente în care parametrii sunt de fapt pointeri.
Deci, dacă veți folosi numerele indexului pentru a face referire la elementele
unui tablou care este trecut la o funcție, atunci declarați parametrul ca o matrice din nou convențional notational este doar
o altă modalitate de notare fie folosind paranteze în index, fie folosind un pointer matricea în sine este, de obicei, mai ușor de citit în
ceea ce privește principalele.
Deci programul mai corect reflectă utilizarea matricei de către funcție, dar pointerul este mai ușor
de utilizat.
Și dacă utilizați un argument ca un pointer la matrice, declarați că acesta este de
tip pointer în parametrul formal.
Deci, iată un exemplu cu animația indicatoare a funcției în care exemplul anterior pe care
îl folosim în Rayno luat aici, spunem doar în matricea Star din Wilcher, căci funcția devine imediat mult
mai mică.
Corect, pentru că nu trebuie să alocăm pointerul la matrice la primul element ca și cum am făcut, bucla
devine, de asemenea, mult mai mică pentru că nu avem nevoie să facem această atribuire în prima declarație.
Putem spune doar până când matricea este mai mică decât sfârșitul matricei și putem crește matricea.
Deci este un cod mai mic.
Este încă foarte clar ce se întâmplă.
Sperăm că, dacă înțelegeți că arătările și indicii au fost trecuți în întreaga matrice și nu mai trebuie
să inițializăm matricea pentru că o transmitem prin pointer, nu am mai
inițializat indicatorul.
Apoi, de fapt, setăm adresa sfârșitului matricei la o matrice pointer constantă și o folosim ca să
sară din bucla și spunem doar suma plus matricea de stele egală folosind operatorul de indirecție pentru a
dereferența Reagan-ul care returnează suma și apoi funcția principală este exact aceeași, cu excepția faptului că
declarația este acum un pointer, spre deosebire de o matrice.
Deci, aici sunt două exemple care utilizează notație diferită.
Dar oferind aceeași funcționalitate și de aceea vedeți o mulțime de pointeri ca parametri
în interiorul unui parametru de funcție.
Deci, pentru a rezuma aici sunt câteva lucruri care sunt valide atunci când utilizați indicii și lucruri care nu sunt valabile.
Deci, dacă declarăm câteva variabile aici, declarăm o matrice numită câștig și conține trei elemente
și apoi declarăm două indicii.
Acum, pe aceste indicii putem face aritmetică.
Am putea spune pointerul 1 plus plus putem spune că pointerul este egal cu pointerul 1 plus două.
Putem chiar să spunem pointer la egal câștigat plus 1, care este perfect valabil pentru a face acest lucru pentru că aveți
indicii și modificați indicii de la adresa.
Deci poți să faci aritmetică pointer.
Nu puteți face aritmetică pointer pe matrice.
Nu puteți vedea câștigul plus plus puteți spune acum un punct sau doi egal cu pointer plus punct 1.
Corect, deoarece acestea sunt adrese și nu indică nimic din interiorul unei matrice.
Și nu puteți multiplica ori câștigat pointer unul pentru a obține pointer la dreapta.
Acestea sunt nevalabile.
Așadar, acordați atenție sintaxei corecte pentru aritmetica pointerului și înțelegeți, de asemenea,
că aritmetica pointerului poate fi aplicată numai la indicii care nu sunt matrice OK.
De asemenea, funcțiile care procesează matricele utilizează de fapt indicii la argumente.
Aveți posibilitatea să alegeți între notația matriceală și notația pointerului pentru scrierea funcțiilor de procesare a matricei.
Deci, dacă veți procesa funcția de port maritim, este bine să utilizați un indicator este un parametru.
Puteți alege care dintre acestea doriți să utilizați, dar utilizarea pointerilor este de obicei mai puțină cod și mai eficientă.
Folosind notația array-ului este mai evident că funcția funcționează cu o notație de matrice are un aspect mai
familiar pentru programatorii care au un anumit fond de programare în anumite limbi.
Deci, dacă programați înainte în Fortran Pascal și așa mai departe, puteți utiliza notația de array alți programatori ar
putea fi mai personalizate cu indicatori și ar putea găsi notația pointerului mai naturală.
Doar mai mult sens este mai aproape de limbajul mașinii folosind aritmetica pointerului și notația pointerului și
cu unele compilatoare conduce la un cod mai eficient.
Un alt motiv pentru ao folosi.
Așadar, să aruncăm o privire asupra acestor exemple în interiorul blocurilor de coduri, așa că aici este exemplul nostru din partea Sluys.
Avem o declarație de funcționare pe linia 3.
Este o array PS ..
Și în acest exemplu pe care o vom lua, vom folosi notația de matrice.
Așa că vom folosi parantezele atunci când vom folosi indicii și o vom numi trecând în tabloul
de valori și trecând în dimensiune, astfel încât matricea unei anumite funcții necesită o matrice integeră Primul lucru pe care trebuie să-l faceți este că
trebuie să semn pe linia 15.
Primul lucru pe care trebuie să-l faceți este să creați pointerul pe care
doriți să-l utilizați pentru aritmetica pointerului pe linia 14 și apoi trebuie să alocați sfârșitul matricei la matricea
de adrese plus mărimea.
Acesta este sfârșitul matricei pe care o puteți utiliza acum pentru a ieși din bucla.
Dar trebuie să alocăm pointerul la matrice.
Știm că putem atribui array-urilor pointerilor pentru a indica primul element folosind
doar numele matricei.
Nu trebuie să folosim adresa operatorului pe care îl numim dacă vrem.
Am putea face ceva de genul asta.
Și acest lucru este bine, de asemenea.
Apoi, plus plus plus punctul de incrementare a pointerului pentru
că tot ceea ce face este scris în următoarea adresă pe care o indică la următorul element
din matrice și apoi pe linia 18 dereferențăm pointerul pentru a calcula suma unora sumă egală plus valoarea indicatorului care indică.
Deci, dacă construim acest lucru, avem un avertisment, principalul care nu este un furnică.
Doriți să schimbați acest lucru deoarece este bine să returnați valorile de eroare de la principalele și să spuneți doar întoarce sau ați putea reveni
dacă a existat o eroare și ați făcut să reveniți unul negativ.
Acum vom rula acest lucru veți vedea că acesta efectuează doar suma de valori în matrice care este de trei plus șapte
plus negativ nouă și așa mai departe.
Nici măcar sigur ce este, dar se pare că are 21 de ani.
Acum putem modifica cu ușurință acest parametru de matrice pentru a lua Tica un pointer prin declararea
asteriscului înaintea indicatorului.
Noi o numim în același fel.
Modificăm doar.
Nu trebuie să mai spunem indicatorul.
Vreau să schimb numele pentru a face mai ușor, dar nu mai trebuie să mai spunem acest indicator.
Încă mai dorim să terminăm matricea și nu mai avem nevoie să o atribuim.
Putem doar să avem un lucru gol și ar fi mai util să avem o pereche sălbatică.
Dar dacă nu avem nici o sarcină, putem pune suma pe care o cheam acolo și acum suntem buni.
Mai dorim să ne referim.
Încă vrem să ne întoarcem, dar dacă construim acest lucru, vrem să ne asigurăm că definim declarația funcției ca indicatorul de când
am schimbat și acest lucru poate fi orice nume care va fi doar consecvent.
Acum se construiește numai că vrem să ne asigurăm că folosim din nou toate variabilele pe care le-am schimbat.
Acum, în cele din urmă Bill, vom reuși cu succes.
Și veți vedea că obțineți același rezultat care este de 21.
Așa că înțeleg această diferență între folosirea indicatoarelor ca parametri formali în matrice.
Le puteți folosi interschimbabil.
Este doar o convenție notații.
Dar aveți mai puține coduri, de obicei atunci când utilizați un pointer și îl puteți manipula mai mult și puteți
face lucruri mai puternice.
De obicei, este mai eficient să se bazeze pe compilator.
Mulțumesc.