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;
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
Aceste operatii sunt operatii cu adresele continute in variabilele de tip pointer.
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);
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));
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 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();
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)
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();
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¿
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);
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()
|