Warning Nu esti autentificat. Te rog autentifica-te sau inregistreaza-te pentru a avea acces la toate facilitatile forumului.
SkullBox  
Noiembrie 21, 2008, 10:32:46 am
Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
Noutăţi: Gadgetinho - IT cu zambetul pe buze
 
 SkullBoxDirector webTutoriale  Pagina principală   Ajutor Caută Autentificare Creează un cont  
Pagini: [1]
  Imprimă  
Subiect: [Curs]C - Lectia 06 - Structuri  (Citit de 428 ori)
0Utilizatori şi 1 Vizitatori
redkar23
Global Moderator
Full Member
*****
Deconectat Deconectat

Mesaje: 151


WWW
[Curs]C - Lectia 06 - Structuri, Martie 27, 2008, 05:05:43 pm

M-am gandit sa scriu si un Index la aceasta lectie, ca sa stiti cam ce va asteapta Smile

      I.   Conceptul de structura
      II.  Declararea unei structuri
      III. Declararea variabilelor de tip structura
      IV.  Operatori pentru structuri
      V.   Un programel care foloseste ce am invatat in aceasta lectie
      VI.  Epilog Laughing

  I.Conceptul de structura

 
  Ca o introducere, ar trebui oarecum definit conceptul de structura in C Big grin
   
   Structura = O colectie de valori.
   Proprietati ale structurii :    
        - nu poate contine functii
        - nu poate contine variabile de tip void

 
 II.Declararea unei structuri
 
      -se face prin intermediul cuvantului cheie struct ( cuvant cheie = cuvant rezervat )
 
 
Citat
Forma generala
   struct {
        //declaratii de variabile;
        tip_variabila1 ;
        //..................................................
       tip_variabilaN ;
    } declarare_structura;
Deci, am invatat forma generala a structurii. Acum cateva observatii privind componentele acesteia:

     a)declarare_structura -  apartine declaratiei unei variabile de tip structura , vom vorbi imediat si despre aceasta:).

     b) si declarare_structura sunt componente optionale,dar nu simultan. Deci sau lipseste prima componenta sau ultima. Desigur, fiind optionale, exista si cazul in care ambele componente sunt prezente Smile

     c)La declararea structurii nu putem initializa nici o variabila din aceasta.
     d) Componenta tip_variabila poate fi orice tip existent in C , chiar si struct,  exceptie facand void .  
   Un exemplu in care declaram o structura
 
Citat
struct persoana {
      int varsta;
      char nume[30],prenume[30],ocupatie[30];
      }l
III.Declararea variabilelor de tip structura
 
     Variabilele de tip structura pot fi instante ale unei structuri sau pointeri catre o structura. Nu incep sa explic decat partea cu instantele unei structuri. Pointerii sunt acoperiti in alta lectie .

 
Citat
Forma generala
     
        nume_structura ;
Componenta declarare_structura este echivalentul declararii unei variabile de tip structura.Daca doar aceasta componenta este prezenta ,si nume_structura nu exista, structura este unica, si nu se pot creea instante ale acesteia.

Exemplu pentru structura definita mai sus
Citat
persoana var; // am definit o variabila var de tip persoana = instanta a structurii persoana
IV.Operatori pentru structuri

     a) Accesarea unui camp dintr-o structura
         - se face prin intermediul operatorului "." ( punct)
          Exemplu :
       
Citat
//Considerand variabila var de tip persoana ,putem accesa urmatoarele campuri
          var.varsta     // tip int  
          var.nume      //tip char
          var.prenume  // tip char
          var.ocupatie   // tip char

          Code Example :
           
            printf(" Nume si prenume : ");
            scanf("%s %s", &var.nume,&var.prenume);
              printf("Your full name is %s %s.\n",var.nume,var.prenume);
b)  operatorul & ( vezi exemplu deasupra )
    c)  operatorul sizeof - returneaza marimea in bytes a structurii
        Exemplu
       
Citat
printf("%d \n",sizeof(var)); // suma marimilor in memorie a campurilor acestei structuri
V. Un programel care foloseste ce am invatat in aceasta lectie

   
Cod:
  #include
   
   struct persoana{
        struct {
            int zi,luna,an;
             }data_nasterii;
        struct {
            char nume[30],prenume[30];
            }name;
         char ocupatie[50];
        };

    persoana Record;
     
    int main(){
         printf("Inregistrare persoana\n");
         printf("Nume si prenume : ");
         scanf("%s %s",&Record.name.nume,&Record.name.prenume);
         printf("Data nasterii\n");
         printf("   Zi : ");scanf("%d",&Record.data_nasterii.zi);
         printf("   Luna :");scanf("%d",&Record.data_nasterii.luna);
         printf("   An : ");scanf("%d",&Record.data_nasterii.an);
         printf("Ocupatie : ");
         scanf("%s",&Record.ocupatie);
         
         write_record(Record); // functie care afiseaza continutul variabilei Record de tip structura
         return 0;
        }
Daca ati citit lectia, ar trebui sa stiti ce face codul Smile .

VI. Epilog

       Da. Deci epilog , deci The End, Game over . Laughing
       Sper ca a fost oarecum utila lectia. Ma astept la critici, chiar as fi bucuros sa ma completati sau sa ma corectati Big grin
   Cheers
Memorat


What doesn't kill you, makes you stronger .       - Friedrich Nietzsche
O noua definitie a ironiei : life itself .                 - Redkar23
astan
Skullbox user
Global Moderator
Sr. Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 276


[Curs]C - Lectia 06 - Structuri, Martie 27, 2008, 11:57:41 pm

Cateva lucruri care merita adaugate:
- o structura poate contine pointeri la functii
- compilatorul poate introduce padding in interiorul structurii pentru a se asigura ca membrii structurii sunt aliniati
- pentru a afla usor offsetul in bytes al unui membru in cadrul structurii se poate folosi macroul "offsetof" declarat in stddef.h

Exemplu:
Cod:
#include
#include

struct my_struct
{
char x;
int y;
short z;
long t;
};

int main()
{
struct my_struct str1 = {'a', 1, 2, 3L};
printf("Offset of field x in struct str1 is %x bytes\n", offsetof(struct my_struct, x));
printf("Offset of field y in struct str1 is %x bytes\n", offsetof(struct my_struct, y));
printf("Offset of field z in struct str1 is %x bytes\n", offsetof(struct my_struct, z));
printf("Offset of field t in struct str1 is %x bytes\n", offsetof(struct my_struct, t));
return 1;
}
Output-ul pe calculatorul meu (linux x86-64):

Offset of field x in struct str1 is 0 bytes
Offset of field y in struct str1 is 4 bytes
Offset of field z in struct str1 is 8 bytes
Offset of field t in struct str1 is 10 bytes

Precum se observa, offset-ul lui x este 0, evident pentru ca e primul membru al structurii (adresa primului membru al unei structuri e identica cu adresa structurii)
Offset-ul lui y este 4 bytes. Precum se observa, compilatorul a introdus un padding de 3 bytes dupa membrul x pentru a alinia adresa lui y la 4 bytes (pentru ca sizeof(int) = 4 pe masina mea)
Offset-urile lui z si t sunt evidente ...
Memorat
redkar23
Global Moderator
Full Member
*****
Deconectat Deconectat

Mesaje: 151


WWW
[Curs]C - Lectia 06 - Structuri, Martie 28, 2008, 06:45:00 pm

Mersi de completari Smile Intotdeauna cad bine informatii noi Big grin
 
  Cheers
Memorat


What doesn't kill you, makes you stronger .       - Friedrich Nietzsche
O noua definitie a ironiei : life itself .                 - Redkar23
HostGator
Newbie
*
Mesaje: Multe

Reclamă cu aligatori
 

Ai auzit de aligatorul care ofera hosting?
 
   
Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Creat cu MySQL Creat cu PHP Ethical hacking and programming community Director web romanesc cu inscriere gratuita Validat cu XHTML 1.0! Validat cu CSS!
IPFind, FAQDB, LAMP.ro, Good Proxy, Aberez.EU, RoFreeSBIE, ShockingSoft.com, HostVision, Invatam.net, PC Troubleshooting, Curs valutar online
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro