Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Pointeri la structuri

c



+ Font mai mare | - Font mai mic



Pointeri la structuri

Limbajul C recunoaste pointerii la structuri in acelasi mod in care se recunoaste pointerii la orice alt tip de variabila.

Declararea unui pointer la structura se face plasand operatorul * in fata numelui unei variabile structura. De exemplu, pentru structura addr definita mai inainte, urmatoarea instructiune declara pe addr_pointer ca pointer la o data de acest tip :



struct addr *addr_pointer;

O utilizare importanta a pointerilor la structura consta in realizarea apelului prin adresa intr-o functie.

Cand unei functii i se transmite ca argument un pointer la o structura, calculatorul va salva si va reface din stiva numai adresa structurii, conducand astfel la cresterea vitezei de executare a programului.

Pentru a gasi adresa unei variabile structura, se plaseaza operatorul & inaintea numelui variabilei structura. De exemplu, dandu-se urmatorul fragment :

struct balanta person;

struct balanta *p;

/* se declara un pointer la structura */

atunci:

p = &person;

plaseaza adresa lui person in pointerul p. Pentru a referi elementul balance, se va scrie:

(*p).balance

Deoarece operatorul punct are prioritate mai mare decat operatorul *, pentru o referire corecta a elementelor unei structuri utilizand pointerii sunt necesare paranteze.

Actualmente, pentru referirea unui element al unei variabile structura dandu-se un pointer la acea variabila, exista doua metode: Prima metoda utilizeaza referirea explicita a pointerului nume-structura si este considerata o metoda invechita (obsolete), iar a doua metoda, moderna, utilizeaza operatorul sageata -> (minus urmat de mai mare).

Exemplu: Pentru a vedea cum se utilizeaza un pointer-struct, examinam urmatorul program care afiseaza ora, minutul si secunda utilizand un timer software.

# include <stdio.h>

void actualizeaza();

void afiseaza(), delay();

struct tm ;

void main()

void actualizeaza(t)

/*Versiunea 1- referirea explicita prin pointeri */

struct tm *t;

if ((*t).minute == 60)

if ((*t).ore == 24) (*t).ore = 0;

delay();}

void afiseaza(t) // Se defineste functia afiseaza()

struct tm *t;

void delay() /* Se defineste functia delay() */

Pentru ajustarea duratei intarzierii se poate modifica valoarea contorului t al buclei.

Se vede ca programul defineste o structura globala numita tm, dar nu declara variabilele. In interiorul functiei main() se declara structura 'time' si se initializeaza cu 00:00:00. Programul transmite adresa lui time functiilor actualizeaza() si afiseaza(). In ambele functii, argumentul acestora este declarat a fi un pointer-structura de tip 'tm'. Referirea fiecarui element se face prin intermediul acestui pointer. Elementele unei structuri pot fi referite utilizand in locul operatorului '.', operatorul '->'. De exemplu :

(*t).ore

este echivalent cu

t -> ore

Atunci programul de mai sus se poate rescrie sub forma:

# include <stdio.h>

void actualizeaza();

void afiseaza(), delay();

struct tm ;

void main()

void actualizeaza(t)

/*Versiunea 1- referirea explicita prin pointeri */

struct tm *t;

if (t->minute == 60)

if (t->ore == 24) t->ore = 0;

delay();}

void afiseaza(t) // Se defineste functia afiseaza()

struct tm *t;

void delay() /* Se defineste functia delay() */



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2097
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved