Structura în B

Tag-uri: C structura de inițializare a structurii, inițializarea structurilor imbricate, pointer la o structură, structuri imbricate, indicatoare către structuri imbricate, indicii pentru structura câmpului, alinierea câmpurilor de structură, ambalaj pragma.

Lumea din jurul tau poate simula o varietate de moduri. Cel mai natural dintre ele este o imagine de el ca un set de obiecte. Fiecare obiect are propriile sale proprietăți. De exemplu, pentru o persoana este de varsta, sex, inaltime, greutate, etc. Pentru biciclete - tipul de dimensiunea roții, greutate, material, producător, și așa mai departe pentru mărfurile din magazin. - numărul de identificare, numele, artist, greutate, pret, discount, etc.

În clasele de obiecte set de aceste proprietăți sunt aceleași: toți câinii pot fi descrise cu o anumită precizie, același set de proprietăți, dar valorile acestor proprietăți vor fi diferite.

Toate avioanele au un set de proprietăți comune în aceeași clasă. Dacă avem o descriere mai precisă, putem distinge subclasele: avioane amfibiu, avioane de lupta, nave de pasageri - și în cadrul acestor clase trebuie să descrie obiecte. De exemplu, avem nevoie pentru a stoca informații despre angajați. Fiecare angajat, în general, are un număr mare de proprietăți diferite. Am ales doar cele pe care le interesează în soluții pentru probleme de aplicare: gen, numele, prenumele, data nașterii, numărul de identificare. Pentru a lucra cu un astfel de obiect, avem nevoie de o structură care ar putea cumula diferite tipuri de date sub un singur nume. În acest scop, în structura B sunt utilizate.

Domenii pot fi orice tip de structură declarată, cu excepția structurii de același tip, dar poate stoca un pointer la o structură de acest tip:

În cazul în care mai multe câmpuri au același tip, ele pot fi separate prin virgulă:

După ce am anunțat structura, puteți crea o variabilă de acest tip, folosind un struct cuvânt rezervat. Accesul la structura de câmp se realizează prin intermediul punctului de operare:

Structura declarat într-un context global este vizibil pentru toată lumea. Structura poate fi, de asemenea, declarată în funcție de:

Puteți simplifica exemplu sintaxa vă permite să creați instanțe ale structurii imediat după definiția:

Structura poate fi, de asemenea, anonim. Apoi, nu putem folosi numele structurii în viitor.

În acest exemplu, am creat variabila A. Este o structură cu două câmpuri.

Structura poate fi inițializat în momentul creării unei matrice. Domenii în acest caz, vor fi alocate în ordine.

Notă: în acest mod poate doar initsalizirovat structura. Atribui o valoare pentru întreaga structură astfel imposibilă.

Când definim noua structură, cu ajutorul cuvântului struct oficial, un nou identificator este creat în structurile de spațiu de nume (nu are nimic de a face cu namespace C ++). Pentru al accesa, trebuie să utilizați oficial struct cuvântul. Puteți defini un nou tip de serviciu, folosind cuvântul typedef. Apoi, alias va fi generat pentru structura noastră, văzută într-un context global.

Notă. Dacă vom crea o structură de tip nou, un domeniu care este un pointer la același tip, acesta trebuie să fie declarată în mod explicit folosind struct cuvântul rezervat

Pointer la o structură este creată ca de obicei. Diferența constă în faptul că se poate referi la structura prin câmpuri cursorul utilizând operația „de mână“ (+ minus mai mult). Exemplu - utilizatorul introduce numărul - dimensiunea membrilor matrice. Acest câmp aduce la fiecare dintre ele un nume de utilizator și parolă. Al treilea câmp - ID - este setat automat. După aceea, toți utilizatorii sunt afișate.

Notă eliminarea unei matrice de structuri: atunci când eliminați o instanță a structurii aceasta nu elimină propriile câmpuri, așa că trebuie să eliminați mai întâi câmpul, apoi ștergeți matrice.
Când se apelează o funcție jsonUser vom trece un pointer la instanta a structurii, astfel încât, în funcție pentru a accesa câmpurile folosind operatorul săgeată.

Structura în B
Prezentarea structurii de memorie.

Prima structură trebuie să aibă o dimensiune de 6 octeți, al doilea 8 bytes, al treilea octet 7, dar pe un compilator mașină pe 32 de biți VC le face toate cele trei egale de 8 octeți. Standardul asigură că câmpurile sunt dispuse unul în spatele celuilalt, dar nu garantează că în mod continuu.

Este posibil să se schimbe structurile de ambalare în memorie. Puteți spune explicit compilator cum să facă structura de ambalare a câmpurilor, asociații sau domenii de clasă. Cum de a face acest lucru depinde de compilator. Una dintre cele mai comune modalități de ambalaj Pragma ()

Utilizarea ambalaj #pragma nu este binevenit: logica programului de lucru nu trebuie să depindă de reprezentarea internă a structurii (desigur, dacă nu faci programare de sistem sau rupe programele și rețelele altor persoane).

Comportamentul standard la acționarea unei structuri la alta este nedefinit. Acest lucru înseamnă că, chiar dacă structurile sunt același domeniu, nu poate arunca în mod explicit o structură la alta.

Aceasta funcționează, dar este un hack, care ar trebui evitate. Scrie corect asa

Conduce la o serie de structuri (sau orice alt tip) standard posibil (deși în compilatoare diferite au instrumente pentru a face acest lucru).
Dar B este posibil.

Dar, amintiți-vă că, în acest caz, comportamentul este nedefinit.

Structura in sine poate fi structura câmpului. Exemplu: Structura model - model de vehicul are un nume, număr, an și câmpul Marca, care, la rândul său, păstrează numele de marcă și numărul său.

structurile imbricate sunt inițializate ca matrici multidimensionale. Inițializarea se poate face pornind exemplul anterior, după cum urmează:

P.S. într-un mod similar pentru a inițializa linia nu este necesară, așa că aici se face numai pentru a simplifica codul.

Pointeri la câmpurile de structură sunt, de asemenea, definite ca indicii normale. Pointerii pentru structurile imbricate sunt posibile numai atunci când structura este definită. refaceți ușor exemplul anterior: „deanonimiziruem“ structură fără nume imbricată și indicii la structurile ia domeniu Model:

Așa cum am menționat mai devreme, în B, chiar dacă cele două structuri același domeniu, dar structura poate avea nume diferite, ele nu pot duce la același tip. Deci, va trebui să scape de structurile imbricate anonime, în cazul în care au nevoie pentru a lua un pointer. Puteți încerca să ia un pointer de tip char * pe structura, dar nu există nici o garanție că câmpurile vor fi amplasate permanent.

1. stiva este implementată folosind „nod“ structură, care stochează valoarea (tipul int în exemplul nostru) și un pointer la nodul următor. Aceasta este o implementare ineficientă, care necesită îndepărtarea și eliberarea de memorie pentru fiecare nod la o apăsare operațiune de apel și pop.

2. realiza structura - matrice și anumite operații pentru tablouri. tip matrice definim macro.

3. Structura Linia este formată din două puncte de structuri. Pentru concizie, doar câteva tranzacții vinde

4. Structura unui număr și funcții complexe pentru a lucra cu ea.

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

articole similare