Jump to content
Skiry

Intrebare - struct

Recommended Posts

Posted

Banuiesc ca te referi la "struct"-ul din C/C++.

E simplu, sa luam un exemplu:

1. Un int, de obicei, se memoreaza pe 4 octeti

2. Un char se memoreaza intotdeauna pe 1 octet

3. Un float, de obicei, are 4 bytes

Astfel, putem crea o structura compusa din mai multe campuri:

struct Om // Sau typedef struct Om

{

int varsta;

float inaltime;

};

O structura are avantajul de a grupa niste date care definesc un "obiect" (In C++ o structura chiar defineste un obiect, la fel ca si cuvantul "class"). In C doar se grupeaza niste date, in C++ insa "struct" este identif cu "class" cu exceptia faptului ca implicit in struct datele sunt "public" iar in class sunt "private". Nu te stresa cu aceste aspecte, le vei invata pe parcurs cand vei invata C++. Pentru inceput e de ajuns sa intelegi ca asa se pot grupa niste date.

Astfel poti defini un obiect de tipul "Om", la fel cum definesti un "int".

Om variabila_de_tipul_Om; // Sau 'struct Om variabila_de_tipul_Om;' 

int variabila_de_tipul_int; // Variabila simpla

Cu variabila de tipul "Om" poti accesa datele astfel:

variabila_de_tipul_Om.varsta = 12;

variabila_de_tipul_Om.inaltime = 1.80;

Si cam asta e tot. Daca datele sunt alocate dinamic, se schimba putin lucrurile:

Om *variabila_de_tipul_Om_C = (Om *)malloc(sizeof(Om)); // Aloci, in C, spatiu pentru o structura de tipul Om

Om *variabila_de_tipul_Om_CPP = new Om; // Aloci si apelezi contructorul (nu te intereseaza asta deocamdata) in C++

Iar pentru accesarea datelor:

variabila_de_tipul_Om->varsta = 12;

variabila_de_tipul_Om->inaltime = 1.80;

Un lucru de care trebuie sa tii cont cand folosesti structuri e dimensiunea structurii:

struct Test

{

int x; // 4 bytes

char y, z; // 2 bytes, cate unul fiecare

}

Desi in mod normal structura ar avea 6 bytes, de cele mai multe ori compilatorul "aliniaza memoria" la multipli de 4 octeti. Astfel este posibil ca dimensiunea structurii sa fie de fapt 8 octeti. De aceea e bine sa folosesti intotdeauna operatorul "sizeof" pentru a determina dimensiunea oricarui tip de date.

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...