Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Pointeri

c


Pointeri

O variabila p de tip pointer contine adresa unei variabile a carei valoare se obtine utilizand operatorul p = valoarea variabilei de la adresa continuta in p).



Adresa unei variabile v se poate obtine prin operatorul & (&v = adresa variabilei v), deci putem atribui unui pointer p adresa unei variabile v astfel:

p = &v;

Declararea unui Pointer

Definirea unei variabile de referinta (legata de un Tip) se face astfel:

Tip Var_Referinta ;

Deci, tipul referinta se obtine prin urmatoarea constructie:

Tip

Declararea unui pointer (care contine o adresa nefiind insa legat de un anumit tip) se face astfel:

void Var_Pointer ;

Exemplu:

#include <stdio.h>;

#include <conio.h>;

#include 'Crt.Cpp';

int Cifra(int c)   

void Cifre(int b)   

void main (void)

Date Dati x : 43962 Date Dati x : -1

Rezultate x =43962 Rezultate x = 65535

|x| =2 |x| =2

|&x|=2 |&x|=2

(&x)=ABBA    (&x)=FFFF

Operatii cu Pointeri

Aceste operatii sunt operatii cu adresele continute in variabilele de tip pointer.

Incrementare / Decrementare

Aceste operatii maresc/miocsoreaza valoarea de adresa spre urmatorul element (cu o valoare egala cu lungimea tipului referit):

Var_Pointer ++; Var_Pointer ;

Exemplu:

int Zile[]=; int *Pointer_Int; int Luna; 0,1,,11

printf(' Dati luna (1-12):'); scanf('%d',&Luna);

Pointer_Int=&Zile[Luna]; Pointer_Int--; // &Zile[Luna-1]

printf(' Nr.Zile =%d n',*Pointer_Int);

Adunare / Scadere a unui numar intreg

Aceste operatii maresc/miocsoreaza valoarea de adresa spre alt element (cu o valoare egala cu n · lungimea tipului referit).

Var_Pointer +n

Exemplu:

int Zile[]=; int *Pointer_Int; int Luna;

printf(' Luna (1-12) : '); scanf('%d',&Luna);

Pointer_Int=Zile+Luna; printf(' Nr.Zile=%d n',*Pointer_Int);

Pointer_Int=Zile;    printf(' Nr.Zile=%d n',*(Pointer_Int+Luna));

Comparare

Doi pointeri ale elementului aceluiasi tablou pot fi comparati utilizand operatorii relationali. Valoarea NULL marcheaza faptul ca un pointer nu refera nici un element.

p < p2 p = = p2 p != p2 p NULL

Exemplu:

int Zile[]=; int *luna; int Zi,Luna,An, NrZile;

printf(' Zi, Luna, An : '); scanf('%d %d %d',&Zi,&Luna,&An);

if (An&3) Zile[2]=28; if ((Zi>Zile[Luna]) || (Luna>12)) luna=NULL; else luna=Zile;

if (luna!=NULL)

else     printf(' Data calendaristica incorecta! n');

Diferenta

Diferenta a doi pointeri ai aceluiasi tablou da ca rezultat diferenta indicilor.

Exemplu:

int Zile[]=; int *luna; int Zi,Luna,An, Ziua;

printf(' An, A cata zi din an:'); scanf(' d d',&An,&Ziua); if (An&3) Zile[2]=28;

for (luna=Zile+1; Ziua>*luna; luna++) Ziua-=*luna;

printf(' Zi:%d, Luna:%d, An:%d n',Ziua,luna-Zile,An);

Exemplu:

// Operatii cu pointeri

#include <iostream.h>

#include <conio.h>

void Tip (int *x, int n)

void main (void)

; int *p,*q;

p=x; q=&x[7];

while (q-p) cout << *(p++); cout << endl;

int &f=x[7]; p=&x[0]; q=&f;

while (q>p) cout << *(p++); cout << endl;

p=x;

while (p-x<7) cout << *(p++); cout << endl;

p=x; int n = (sizeof x) / (sizeof (int));

while ( p-x < n ) cout << *(p++); cout << endl;

p=x;

for (int i=1; i<=n; i++) cout << *(p+i-1); cout << endl;

Tip (x,n); getche();

Alocare dinamica a memoriei

Pentru alocarea / dealocarea variabilelor dinamice sunt utilizate urmatoarele doua functii definite in fisierele alloc.h si stdlib.h:

à       malloc, care returneaza adresa zonei alocate de lungime data n sau NULL daca nu se poate efectua alocarea:

void malloc (unsigned n);

à       free, care elibereaza o zona alocata, precizata prin adresa (pointerul) ei :

void free (void adresa

Exemplu:

#include <stdio.h>;

#include <malloc.h>;

#include <conio.h>; #include 'Crt.Cpp';

int Cifra(int c)   

void Cifre(int b)   

void main (void)

Pointeri la functii

Numele unei functii fiind un pointer la acea functie, ea poate fi parametru actual, si evident trebuie descrisa ca parametru formal:

tip f

Exemplu:

// Pointeri la functii

#include <graphics.h> #include <stdlib.h> #include <stdio.h>

#include <conio.h> #include <math.h> #include 'Graf.h' #define Pi 3.1415926

float Sin (float x) float Cos (float x)

float Sqr (float x) float Sqrt(float x)

void Grafic(float(*f)(float),float a,float b,int u1,int v1,int u2,int v2)

while (x<b);

Window(a,d,b,c); x=a; MoveTo(x,(*f)(x)); do while (x<b);

void main(void)

Urmatorul exemplu construieste un tabel cu valorile a patru functii dintr-un interval dat [a,b] pentru o diviziune precizata (n):

// Pointeri la functii

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

double X(double x)

typedef double (*Pointer_la_Functie)(double);

Pointer_la_Functie Functia[] = ;

char* Functii = ;

int Nr_Functii=3;

void main(void)

getch();

Utilizarea parametrilor din linia de comanda

Apelul unui program poate fi insotit de o lista de parametri:

> Nume_Program Lista_Parametri ¿

care se poate accesa scriind antetul functiei principale astfel:

main ( int ArgC, char ArgV

unde:

à       ArgC este o variabila intreaga care contine numarul de parametri plus unu ( ),

à       ArgV este un tablou care contine adresele parametrilor din lista:

ArgV[0] - pointer la Nume_Program ( ),

ArgV[1] - pointer la primul parametru,

ArgV[ArgC - pointer la ultimul parametru

Exemplu:

#include <stdio.h>;    #include <stdlib.h>; // Calendar 2003

void main (int ArgC, char *ArgV[])

int Zile[]=; int Zi,Luna,luna;

if (ArgC==3)   

else printf (' Dati in linia de comada ziua si luna (din 2003) ! n');

// >Calendar 15 3¿

Declararea constantelor

O alta modalitate de a defini o constanta este modificatorul Const astfel:

Tip const Nume Valoare sau const Tip Nume Valoare

Unui parametru formal declarat cu modificatorul Const nu i se mai poate schimba valoarea in subprogramul respectiv.

Exemplu:

#include <stdio.h>; #include <conio.h>;

int Cifra(const int c)

void main (void)

while (c!=Esc);

Stiva

Prin stiva intelegem o lista cu disciplina Last In First Out pentru care vom defini urmatoarele trei functii:

à       Push - adauga un element in stiva,

à       Pop - extrage un element din stiva

à       Clear - initializarea stivei (stiva vida

à       Vida - verifica daca stiva este vida

// Fact.Cpp

#include <stdio.h>

#include <conio.h>

#include 'Stiva.h'

void main(void)

// Stiva.h

#define DimMax 13

static int Stiva[DimMax]; static Next=0;

void Push(int x)

int Pop()

void Clear()

int Vida()



Document Info


Accesari: 687
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )