Lectures in C / C ++: compus tipuri de date (structuri)
Să ne imaginăm că dorim software-ul pentru a procesa informația despre studenți. Datele privind fiecare elev includ mai multe tipuri de magnitudine - șir cu numele și inițialele, un număr întreg care indică vârsta unui student, punctaj mediu, care este o valoare reală, etc. Cel mai simplu mod de rezolvare a problemei - descrie setul de program de variabile relevante:
Când elevii devin mai mult, va trebui să treacă variabilele la matrice:
Pentru a prelua informații despre ultimul student, avem nevoie pentru a trata valoarea numelui [4]. vârstă [4] și mingea [4]. Astfel, informații despre un obiect este „împrăștiate“ pe mai multe containere de matrice, care face operații extrem de incomod cu „student“ ca o singură entitate. Pentru a depăși acest inconvenient poate structura. vă permite să combinați diferite tipuri de date într-un singur obiect.
Astfel, structura - este componenta principală a tipului de date. Spre deosebire de matrice, reunește într-un obiect valori, care pot avea diferite tipuri de date. Acest lucru face ca structura instrumentul de modelare primară în obiectele de program din lumea reală:
Pentru compatibilitate cu limbajul C înainte de struct de cuvinte cheie de multe ori în scris operatorului de tip Definiție typedef. În C ++, această afirmație este redundantă.
Vom descrie variabilele „noi“ elevul tipul de date.
Nici o diferenta cu descrierea variabilelor de tip simplu int. float, etc. nr.
operațiune este utilizată pentru a accesa datele individuale ale studentului, enumerate în descrierea tipului de structură (câmpuri de structură). ( „Punctul de plecare“), aplicabil formularul de înregistrare struktura.pole. De exemplu, S.NAME ar însemna „numele“ al studentului a cărui informații sunt stocate într-o variabilă numită s.
Astfel, cu structura câmpului permite tuturor aceleași operații ca și cu variabila „normal“ corespunzător tipului de date:
Luați în considerare primele două etape din exemplu.
1. Funcția st_print afișează informații despre structura de tip elev. transmisă ca parametru;
2. Funcția st_new umple noua structură a datelor de student implicit și returnează o structură. Datorită faptului că este susținută de atribuirea structurilor obținute din informațiile funcției este duplicat în funcție principală structura s2.
Rețineți că funcția de transfer ca parametri sau întoarcerea dintr-o funcție a unei mari structuri de dimensiuni poate fi plină de Stack Overflow. O structură pentru a determina volumul RAM poate fi mijloace standard:
Pentru a salva informații cu privire la un grup de 20 elevi natural uite descrierea o serie de structuri:
Accesul la structura se poate face și printr-un pointer.
Puteți efectua apoi PTR ++ pentru scanarea unei liste sau o serie de structuri în așa fel cum am făcut cu indicatori tipuri de date simple.
Accesul la structura câmpului prin indicatorul ia forma următoarea:
Parantezele sunt necesare din cauza prioritățile operațiunilor lingvistice C ++. Înregistrarea arată greoaie, astfel încât în loc, de obicei, ea se folosesc abrevieri mnemonic
Exemplul 1. Funcția spectacol imprimă informații despre elev s (nici un indiciu):
Aceeași funcție cu un pointer:
În primul caz stiva transferat sizeof (student) = sizeof (char) * 20 + sizeof (int) + sizeof (float) octeți (28 octeți când simboluri char - un octet), în al doilea caz - 4 sau 8 octeți (în în funcție de mărimea indicatorului în 32 de biți sau arhitectura de calculator 62 de biți).
Pentru elementul i-lea a structurilor matrice de apelul nostru la prima funcție ar avea forma
Exemplul 2. Funcția st_new folosind indicatorul prezentat mai sus va lua forma
Deoarece noul operator alocă memorie în „gramada“ și nu pe stiva, atunci este posibil să se elibereze operatorul delete.
Aici este un exemplu de 2 programe.
In primul program, toate structura câmp elev -, nu memoria dinamică statică alocată pentru ei, astfel încât atribuirea acestor structuri corect:
În mod alternativ, în loc de linii de alimentare
Structura element poate fi o structură a unui alt tip de structură sau un pointer la structura de tip sale. Ultima caracteristică importantă va permite organizarea structurilor structurile de date dinamice, cum ar fi stive, cozi și copaci. Structura dinamică vor fi discutate într-un subiect separat.
În cele din urmă, observăm că cele mai multe structuri statice naturale de conservare uite în fișierele de date binare (cum ar fi dimensiunea structurii în bytes - fix) și schimbul de date cu aceste fișiere prin metoda fread / fwrite stdio.h de la sau de citire / scriere de fstream:
Pentru structuri cu indicii, în general, a spus inaplicabile. Alternativ, scrie un program care permite studenților să citească o serie de structuri cu un nume de domeniu dinamic din fișierul text data.txt următor:
etc. Se presupune că fișierul este în curent pentru dosarul aplicației executabil. Numărul maxim de intrări încă restricționează ST constantă.
Programul include, de asemenea, o simplă protecție a datelor incorecte în fișierul sursă.