Video: Citirea erorilor fara tester 2024
În programarea C, tipul și dimensiunea variabilei sunt descoperite mai întâi prin declararea acelei variabile ca fiind un tip specific, dar și prin utilizarea dimensiunii cuvântului cheie. A doua descriere a unei variabile, conținutul acesteia, poate fi obținută prin citirea valorii variabilei folosind funcția corespunzătoare limbii C.
A treia descriere a unei variabile este localizarea acesteia în memorie. Obțineți această informație utilizând operatorul & și substituentul% p, așa cum se arată în V variabilă, pentru ce ești tu?
O VARIABILE, DE CE ARTE?
#include int principal () {char c = 'c'; int i = 123; float f = 98,6; dublu d = 6. 022E23; printf ("Adresa" c "% pn", & c); printf ("Adresa" i "% pn", & i); printf ("Adresa 'f'% pn ', & f); printf ("Adresa d '% pn", & d); retur (0);}
Când operatorul & prefixează o variabilă, returnează o valoare reprezentând adresa , a variabilei sau locația acesteia în memorie. Această valoare este exprimată în hexazecimal. Pentru a vedea acea valoare, se folosește caracterul de conversie% p, așa cum se arată în O variabilă, pentru ce ești tu?
Exercițiul 1 : Introduceți codul sursă de la O Variabila, De ce sunteți tu? în editorul tău. Construiți și alergați.
Rezultatele obținute de programul obținut în Exercițiul 1 sunt unice, nu numai pentru fiecare calculator, ci și potențial, de fiecare dată când programul este rulat.
Adresa 'c' 0x7fff5fbff8ff Adresa 'i' 0x7fff5fbff8f8 Adresa 'f' 0x7fff5fbff8f4 Adresa 'd' 0x7fff5fbff8e8
Variabila c este stocată în memorie la locația 0x7fff5fbff8ff -, 734, 799, 804, 671. Ambele valori sunt, desigur, triviale; computerul ține evidența locațiilor de memorie, ceea ce este foarte bine pentru mine.
Această ilustrație arată modul în care acele adrese sunt hărțuite în memorie.
Elementele individuale de matrice au și locațiile de memorie, așa cum se arată în Locațiile de memorie într-o Array on Line 10. Operatorul & prefixează variabila elementului specific, tusind o adresă. Caracterul de conversie% p din funcția printf () afișează adresa.
LOCAȚII DE MEMORIE ÎNTR-O ARRAY
#include int main () {char hello [] = "Bună ziua!"; int i = 0; în timp ce (hello [i]) {printf ("% c la% pn", salut [i], & hello [i]); i ++;} retur (0);}
Exercițiul 2 : Creați un nou proiect utilizând codul sursă prezentat în Locațiile de memorie într-o matrice. Construiți și alergați.
Din nou, ieșirea locației de memorie este unică pe fiecare computer.
H la 0x7fff5fbff8f0 e la 0x7fff5fbff8f1 l la 0x7fff5fbff8f2 l la 0x7fff5fbff8f3 o la 0x7fff5fbff8f4!la 0x7fff5fbff8f5
Spre deosebire de exemplul din Exercițiul 1, adresele generate de Exercițiul 2 sunt contigue în memorie, un octet după altul.
Exercițiul 3 : Codificați un program pentru a afișa cinci valori într-o matrice int împreună cu adresa de memorie a fiecărui element. Puteți utiliza locațiile de memorie într-o matrice pentru a vă inspira, deși o buclă pentru loialitate ar putea fi mai ușor de codat.
-
Apropo, operatorul de localizare a memoriei ar trebui să fie familiarizat cu dvs. Este folosit de funcția scanf (), care necesită o adresă a variabilei, nu variabila în sine. Aceasta deoarece scanf () plasează direct o valoare la o locație de memorie. Cum? Folosind indicii, desigur!
-
Operatorul & este de asemenea operatorul AND; cu toate acestea, compilatorul este suficient de inteligent pentru a spune când & prefixează o variabilă și când & face parte dintr-o ecuație matematică binară.