Pointeri în C

T lui este, probabil, subiectul cel mai dificil și cel mai important din întregul curs. Studiu suplimentare în B ar fi lipsit de sens fără a înțelege indicii. Pointerii - un concept foarte simplu, este foarte logic, dar are nevoie de atenție la detalii.

Luați în considerare codul cu atenție, din nou

Am creat un pointer int.

După aceea, valoarea A este, de asemenea, sa schimbat, deoarece subliniază aceeași zonă de memorie. Nimic complicat.
Acum, un alt exemplu important

Matricea este, de fapt, este ea însăși un pointer, deci nu este necesar să se utilizeze operatorul . Putem rescrie exemplul într-un alt mod

În cazul în care indicii sunt egale, atunci ele indică aceeași zonă de memorie.

Evident, nimic nu împiedică creat și un pointer la un pointer la un pointer, și un pointer la un pointer la un pointer la un pointer, și așa mai departe. Acest lucru avem nevoie atunci când se lucrează cu matrice bidimensionale și multidimensionale. Și aici este un simplu exemplu de modul în care se poate lucra cu un pointer la un pointer.

În conformitate cu standardul garantat că, în acest caz, indicatorul este NULL. și este egal cu zero, și poate fi folosit ca o falsa valoare Boolean. Deși în funcție de NULL implementare nu poate fi egal cu 0 (în sens, nu este egal cu zero în reprezentarea bitmap, cum ar fi, int sau float).
Acest lucru înseamnă că, în acest caz,

este funcționarea corectă, iar în cazul

comportamentul este nedefinit. Aceasta este, indicatorul poate fi comparat cu zero, sau NULL. dar nu poate fi NULL pentru a compara o variabilă de tip întreg sau tip în virgulă mobilă.

Acum câteva exemple de lucru cu indicii
1. Să mergem prin matrice și pentru a găsi toate elementele chiar.

2. Când rezolvăm elementele de multe ori trebuie să le miște. În cazul în care obiectul ocupă o mulțime de spațiu, atunci schimbarea cele două elemente ale operațiunii va fi costisitoare. În schimb, puteți crea o serie de indicii pentru elementele originale și sortați-l. Deoarece dimensiunea indicatorului mai mică decât dimensiunea de matrice țintă și apoi sortarea se va produce mai repede. În plus, matricea nu va fi schimbat, este de multe ori importantă.

3. Un exemplu mai interesant. Deoarece dimensiunea de tip char este întotdeauna 1 octet, atunci acesta poate fi utilizat pentru a realiza operația de swap - schimbarea conținutului două variabile.

În acest exemplu, puteți schimba tipul și b în dublu, sau orice alt (cu ieșire o modificare corespunzătoare sizeof și apel), în continuare, vom face schimb de locuri de bytes de două variabile.

4. Am găsit lungimea șirului introdus de utilizator folosind indicatorul

Să acorde o atenție la secțiunea de cod

acesta poate fi rescris

sau prin eliminarea ratei de creștere în starea

ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 [email protected] studenți Stepan Sypachev

articole similare