Documente Academic
Documente Profesional
Documente Cultură
1. Algoritmi
1.1. Noiunea de algoritm, caracteristici
1.2. Date, variabile, expresii, operaii
1.3. Structuri de baz (liniar, alternativ i repetitiv)
1.4. Descrierea algoritmilor (programe pseudocod)
2. Elementele de baz ale unui limbaj de programare (Pascal sau C, la
alegere)
2.1. Vocabularul limbajului
2.2. Constante. Identificatori
2.3. Noiunea de tip de dat. Operatori aritmetici, logici, relaionali
2.4. Definirea tipurilor de date
2.5. Variabile. Declararea variabilelor
2.6. Definirea constantelor
2.7. Structura programelor. Comentarii
2.8. Expresii. Instruciunea de atribuire
2.9. Citirea/scrierea datelor
2.10. Structuri de control (instruciunea compus, structuri alternative i repetitive)
3. Subprograme predefinite
3.1. Subprograme. Mecanisme de transfer prin intermediul parametrilor
3.2. Proceduri i funcii predefinite
4. Tipuri structurate de date //(tipul pointer)
4.1. Tipul tablou
4.2. Tipul ir de caractere
operatori, proceduri i funcii predefinite pentru: citire, afiare, concatenare,
cutare, extragere, inserare, eliminare i conversii (ir valoare numeric)
4.3. Tipul nregistrare
5. Fiiere text
5.1. Fiiere text. Tipuri de acces
5.2. Proceduri i funcii predefinite pentru fiiere text
6. Algoritmi elementari
6.1. Probleme care opereaz asupra cifrelor unui numr
6.2. Divizibilitate. Numere prime. Algoritmul lui Euclid
6.3. irul lui Fibonacci. Calculul unor sume cu termenul general dat
6.4. Determinare minim/maxim
6.5. Metode de ordonare (metoda bulelor, inseriei, seleciei, numrrii)
6.6. Interclasare
6.7. Metode de cutare (secvenial, binar)
6.8. Analiza complexitii unui algoritm (considernd criteriile de eficien durata
de executare i spaiu de memorie utilizat)
7. Subprograme definite de utilizator
7.1. Proceduri i funcii
declarare i apel
parametri formali i parametri efectivi
parametri transmii prin valoare, parametri transmii prin referin
variabile globale i variabile locale, domeniu de vizibilitate
7.2. Proiectarea modular a rezolvrii unei probleme
8. Recursivitate
1
I.
Algoritmi
ALGORITM
Date de ieire
Operatorii relaionali descriu relaia de ordine sau de egalitate dintre cei doi
operanzi: < (mai mic), > (mai mare), (mai mic sau egal), (mai mare sau egal),
= (egal), (diferit).
Operatorii relaionali sunt operatori binari i se pot aplica numai operanzilor
numerici, logici ( fals < adevrat ) i de tip caracter ( ordinea caracterelor ind
determinat de codurile lor ASCII ).
Valoarea unei expresii relaionale este ntotdeauna de tip logic (deci poate
adevrat sau fals).
Operatori logici
Operatorii logici se pot aplica operanzilor logici. Valoarea unei expresii logice este
de tip logic.
Operatorii logici definesc o operaie logic: negaie logic - !; conjuncie Iogic i; disjuncie logic - sau. Operatorul ! este unar, operatorii i, sau sunt operatori
binari. Efectul acestor operatori este cel uzual. i reamintim n tabelul urmtor:
x
y
!x
x sau y
x i y
Fals (0)
Fals (0)
Adevrat (1)
Fals (0)
Fals (0)
Fals (0)
Adevrat (1)
Adevrat (1)
Adevrat (1)
Fals (0)
Adevrat (1)
Fals (0)
Fals (0)
Adevrat (1)
Fals (0)
Adevrat (1)
Adevrat (1)
Fals (0)
Adevrat (1)
Adevrat (1)
Evaluarea unei expresii
n procesul de evaluare a unei expresii se respect regulile de baz, nvate la
matematic ( n primul rnd se evalueaz expresiile dintre parantezele rotunde;
apoi se execut operaiile n ordinea prioritii lor; dac exist mai multe operaii
cu aceeai prioritate, se execut n ordine, n funcie de asociativitatea lor).
Prioritatea operatorilor este: (1 fiind considerat prioritatea maxim):
Prioritate
Operatori
Simbol
Asociativitate
1.
Negaia logic
!
de la dreapta la stnga
2.
Aritmetici multiplicativi
*, /, %
de la stnga la dreapta
3.
Aritmetici aditivi
+, de la stnga la dreapta
4.
Relaionali
<, >, , , =, de la stnga la dreapta
5.
Conjuncie logic
i
de la stnga la dreapta
6.
Disjuncie logic
sau
de la stnga la dreapta
I.3
10
11
12
13
II.
2.1
Noiuni introductive
Vocabularul limbajului
Exemple:
a=097
A=065
0=048
Pentru a scrie n limbaj de programare un caracter utiliznd codul ASCII :
Alt (din dreapta ) + codul ASCII al caracterului.
Exemplu: Alt+179 scrie caracterul grafic |
Identificatorii sunt ntlnii i sub denumirea de nume i au rolul de a desemna
nume de variabile, constante , funcii, etc.
Din punct de vedere sintactic identificatorii sunt o succesiune de litere, cifre i
liniue de subliniere dintre care prima trebuie s fie liter sau liniu de
subliniere.
Ex: nume corect de variabil: a, a3, _56, nr_cuv
nume greit de variabil: 3aq, nr cuv
Observaii:
- un identificator poate s aib orice lungime, semnificative sunt primele 31
caractere.
- C/C++ este case-sensitive (face distincie ntre literele mari i mici; adic un
identificator a difer de identificatorul A)
- identificatorii ar trebui s aib denumirea n conformitate cu scopul utilizrii
lor.
O categorie special de identificatori este reprezentat de cuvintele
rezervate sau cuvinte cheie ale limbajului.
Din punct de vedere sintactic cuvintele cheie sunt identificatori utilizai numai n
scopul pentru care au fost creai.
Exemplu:
if (cuvnt cheie care marcheaz nceputul instruciunii alternative n C)
while (cuvnt cheie care marcheaz nceputul instruciunii repetitive n C)
Observaie: este eroare de sintax utilizarea cuvintelor cheie n alt scop dect
cel pentru care au fost create
Separatorii
Sunt utilizai pentru a separe unitile sintactice ntre ele;
Exist mai multe tipuri de separatori:
- separatori standard: spaiul ( ), tab(\t), enter (new line \n)
- delimitatori: operatorul virgul (,)
- separatori speciali: ;(este utilizat la finalul unei instruciuni), (apostroafe)
i (utilizai pentru constantele de tip caracter i ir de caractere)
Comentariile
Reprezint o succesiune de caractere pe care compilatorul (cel care
transcrie codul surs n limbaj main) nu le ia n considerare.
Exist n C/C++ dou tipuri de comentarii:
- pe mai multe linii cu marcajul /**/
- pe o singur linie (de la marcaj pn la sf. de linie) cu marcajul //
15
2.3
Constante
este 5 n baza 8
Caracter
\b
\t
\n
\a
16
\\
Caracterul backslash
Caracterul apostrof
Caracterul ghilimele
2.4
Operatorul
Tipul operaiei
Semne (operatori unari)
De multiplicitate (operatori binari)
Aditivi (operatori binari)
+, *, /, %
+,-
Observaii:
Operatorul % se poate aplica numai datelor de tip ntreg.
Dac operatorul / se aplic cel puin unui operand de tip real atunci
rezultatul este real (idem pentru operatorii +,-,*)
Exemplu:
int a=5,b=2;
cout<<a/b; // 2
cout<<(float)a/b; // 2.5
cout<<5/2.0; //2.5
Operatorii logici sunt de dou tipuri: logici globali i logici pe bii (sunt operatori
binari toi n afar de negaia logic i pe bii care sunt unari)
Operatori logici globali (&&, ||, !)
&&
0
!0=1
0
0
0
!0=1
0
1
!
0
!0=1
||
Operatorii 0
orice tip !0=1
Observaie:
datelor de
ntotdeauna logic.
Exemplul 1:
Exemplul 2:
int a=5,b=3;
int a=5,b=3;
if(a>0)
if (a)// a!=0
cout<<a; //5
cout<<a; //5
else
else
cout<<b;
cout<<b;
!0=1
1
0
0
1
1
1
Exemplul 3:
Exemplul 4:
int a=5,b=3;
if(a&&b)
cout<<a+b; //
8
else
cout<<a-b;
int a=5,b=3;
if(a>0 && b<0) //1&&0==0
cout<<a+b;
else
cout<<a-b; //2
Exemplul 5:
int a=5,b=3;
if(a>0 || b<0)
Exemplul 6:
//1||
0==1
cout<<a+b; //
8
else
cout<<a-b;
int a=4;
cout<<(a<0)<<
<<!a<< <<
(a==4); // 0 0 1
0
0
0
|
0
1
sau pe bii
0
1
0
1
0
1
1
1
^
0
1
0
0
1
1
1~
00
1
negaia pe bii
1
0
18
Exemplul &
int a=10,b=5;
//a=10102 b=1012
cout<<a&b; // 0
int a=10,b=6;
//a=10102 b =1102
cout<<a&b; //2
Exemplul |
Exemplul ~
int a=10,b=5;
// a=10102 b=01012
// a|b= 11112=15
cout<<a|b; // 15
int a=10,b=6;
// a=10102 b=01102
// a|b= 11102= 14
cout<<a|b; // 14
int a=10;
cout<<~a;
// 32757
Exemplul ^
int a=10,b=5;
//a=10102
b=01012
//a^b= 11112=15
cout<<a^b; // 15
int a=10,b=6;
//a=10102
b=01102
//a^b= 11002= 12
cout<<a^b; // 12
1 Tipul ntreg
Denumirea
int
Nr. octei
2 octei cu semn
Valori
-32768..32767
Obs.
00000000000000002 =010
11111111111111112=3276710
unsigned int
2 octei fr semn 065535
long int
4 ocei cu semn -21474836482147483647
unsigned long int 4 ocei fr semn 04294967295
Observaie: La oricare din tipurile ntregi n afar de int cuvntul rezervat int este
implicit
long int long; unsigned int unsigned
19
Exemple:
int a; // declar un numr ntreg a crui valoare nu depete n modul 32767
unsigned b,c; // declar dou numere naturale a cror valoare nu depete
65535
2 Tipul real
Denumirea
Nr. octei - n
Valori
virgul mobil
4 octei
[3.4*10-38,3.4*1038]U [-3.4*10+38,-3.4*10-38]
8 octei
[1.7*10-308,1.7*10308]U [-1.7*10+308,-1.7*10-308]
10 octei
[3.4*10-4932,1.1*104932]U [-3.4*10+4932,-1.1*10-4932]
float
double
long double
3) Tipul caracter
Denumirea
char
unsigned char
Nr. octei
1 octet cu semn
1 octet fr semn
Valori
-128127
0255
short int
char
(cu trunchiere)
short int (cu trunchiere)
long int (cu extensia semnului)
ca i int
long int
ca i int
float
double
int
Conversii aritmetice.
Cnd un operator binar se aplic ntre doi operanzi de tip diferit, are loc o
conversie implicit a tipului unuia dintre ei, i anume, operandul de tip mai
restrns este convertit la tipul mai larg al celuilalt operand. Astfel n expresia de
mai jos:
int i;
float f;
f + i operandul int este convertit n float.
20
double float
long
unsigned
2.6
Corect
int a, b, c;
a=b=c=5;
declarate)
int a=b=c=5;
2.6. Definirea constantelor
22
acum e vid
return 0;
}
Cnd execuia unui program se termin cu succes, n mod uzual, programul
returneaz la ncheierea execuiei valoarea 0.
Programul va conine i o serie de fiiere antet (headere) n cazul n care
vrem s folosim funcii standard din fiierele respective.
Zona de preprocesare apare n partea de sus a sursei i este introdus de
caracterul #. n aceast zon vor fi incluse fiiere antet (headere) din care vor fi
folosite funcii standard (pentru citire/scriere , prelucrri de date, funcii
matematice, etc.)
Exemplu:
# include <iostream.h> // am inclus fiierul antet iostream.h care conine funcii
pentru citire/scriere
Observaie:
Dac realizm noi fiiere pe care vrem s le includem n antet acestea vor fi
incluse ntre ghilimele ca de exemplu: # include fisierul_meu.cpp
n zona de preprocesare se pot defini i constante simbolice de forma:
# define PI 3.1415
Comentariile
Reprezint o succesiune de caractere pe care compilatorul (cel care
transcrie codul surs n limbaj main) nu le ia n considerare.
Exist n C/C++ dou tipuri de comentarii:
- pe mai multe linii cu marcajul /**/
- pe o singur linie (de la marcaj pn la sf. de linie) cu marcajul //
Sunt utilizate pentru a crete gradul de lizibilitate a programului i ajut
utilizatorii multiplii la nelegerea programului.
23
2.8
Tipul operaiei
Semne (operatori unari)
De multiplicitate (operatori binari)
Aditivi (operatori binari)
+, *, /,%
+,-
Observaii:
Operatorul % se poate aplica numai datelor de tip ntreg.
Dac operatorul / se aplic cel puin unui operand de tip real atunci
rezultatul este real (idem pentru operatorii +,-,*)
Exemplu:
int a=5, b=2;
cout<<-a;
// afieaz -5
cout<<a/b;
// 2
cout<<(float)a/b; // 2.5
cout<<5/2.0;
//2.5
Operatorii logici sunt de dou tipuri: logici globali i logici pe bii (sunt operatori
binari toi n afar de negaia logic i pe bii care sunt unari)
Operatori logici globali (&&, ||, !)
&&
0
!0=1
0
0
0
!0=1
0
1
!
0
!0=1
||
0
!0=1
logici
!0=1
1
0
0
1
Observaie:
1
1
Operatorii
globali se
datelor de orice tip standard, rezultatul fiind ntotdeauna logic.
Exemplul 1:
Exemplul 2:
int a=5,b=3;
int a=5,b=3;
if(a>0)
if (a)// a!=0
cout<<a; //5
cout<<a; //5
else
else
cout<<b;
cout<<b;
Exemplul 3:
Exemplul 4:
int a=5,b=3;
if(a&&b)
cout<<a+b; //
8
else
int a=5,b=3;
if(a>0 && b<0) //1&&0==0
cout<<a+b;
else
cout<<a-b; //2
24
pot
Exemplul 5:
int a=5,b=3;
if(a>0 || b<0)
aplica
Exemplul 6:
//1||
0==1
cout<<a+b; //
8
else
int a=4;
cout<<(a<0)<<
<<!a<< <<
(a==4); // 0 0 1
cout<<a-b;
cout<<a-b;
0|
00
01
sau pe bii
10
00
11
1
1
1
Exemplul &
int a=10,b=5;
//a=10102 b=1012
cout<<a&b; // 0
int a=10,b=6;
//a=10102 b =1102
cout<<a&b; //2
^
0
1
negaia pe bii
0
0
1
1
~1
00
1
1
0
Exemplul |
Exemplul ~
int a=10,b=5;
// a=10102 b=01012
// a|b= 11112=15
cout<<a|b; // 15
int a=10,b=6;
// a=10102 b=01102
// a|b= 11102= 14
cout<<a|b; // 14
int a=10;
cout<<~a;
// 32758
Exemplul ^
int a=10,b=5;
//a=10102
b=01012
//a^b= 11112=15
cout<<a^b; // 15
int a=10,b=6;
//a=10102
b=01102
//a^b= 11002= 12
cout<<a^b; // 12
12%2=0
6%2=0
3%2=1
1%2=1
0
Observaie: Matematic operaia de deplasare la dreapta pe bii se transcrie:
a>>b=[a/2b]
Operatorul condiional (?:)
expresie1 ? expresie2 : expresie3
Efect: se evalueaz expresie1, dac rezultatul logic este adevrat (1) se execut
expresie2 altfel se execut expresie3.
Exemplu:
int x=-4;
cout<<(x<0 ? -x : x);
Exemplu:
int a=4,b=2;
cout<<(a>b ? a : b); // afieaz maximul dintre valorile a i b
Operatorul referenial (&)
Efect: se utilizeaz pentru a obine adresa de memorie la care este salvat o
variabil
Exemplu:
int a;
cout<<&a; // rezultatul este un numr n baza 16 reprezentnd adresa de memorie a lui a
Operatorul pentru determinarea spaiului de memorie ocupat (n octei)- are
dou forme: sizeof(tip) i respectiv sizeof(variabil)
Exemplu:
int a=20;
cout<<sizeof(int)<<endl;
// 2 (reprezentnd spaiul ocupat n memorie)
cout<<sizeof(a);
// 2 (reprezentnd spaiul ocupat n memorie)
Operatorul de conversie explicit (tip)
Efect: este utilizat pentru conversia forat a unei variabile sau expresii la un tip
standard tip
Exemplu:
float c;
int a=5,b=6;
c=(a+b)/2;
cout<<c;
// 5 rezultat de tip ntreg
c=(float)(a+b)/2;
cout<<c;
// 5.5
c=(a+b)/2.0;
cout<<c;
// 5.5
27
Operatorul , (virgul)
Sintaxa: expresie1, expresie2,, expresien
Rezultatul aplicrii operatorului const n evaluarea expresiilor de la stnga la
dreapta, valoarea final a expresiei fiind valoarea ultimei expresii evaluate.
Exemplu:
int i, a, b;
i=0, b=i+2, a=b*2 // valoarea expresiei este 4
Evaluarea oricrei expresii se realizeaz astfel: dac exist paranteze
rotunde se vor evalua ncepnd cu cea mai din interior (spre exterior). Dac nu
exist paranteze rotunde evaluarea se va face n func ie de prioritatea
operatorilor iar la prioritate egal n func ie de asociativitate.
Prioritat
e
1
2
3
4
5
6
7
8
9
10
11
12
13
Operator
Asociativitate
int a=2, x, y, z;
x=(y=a-1)=z=a;
Se va efectua datorit parantezelor atribuirea y=1 iar apoi se vor efectua
atribuirile multiple de la stnga la dreapta: x=y=z=2
Instruciunea de atribuire poate avea i formele:
identificator_variabil operator = expresie
identificator_variabil = identificator_variabil operator expresie
Unde operatorul poate fi: +, -, *, /, %, <<, >>
Exemplu:
int a=7;
a+=5 ; // a=a+5 a=12
2.9
instr_n;
}
Observaie : instruciunea compus se utilizeaz atunci cnd ntr-o instruciune
de decizie sau repetitiv o ramur conine mai mult de o instruciune.
Exemplu:
.
30
int a,b,c;
if(a>b)
// dac rezultatul evalurii expresiei logice este adevrat
{
// trebuie executate dou atribuiri (grupate ntr-o instruciune
compus)
a=a+b;
c=a+b;
}
else
cout<<Nimic;
Structura alternativ se transcrie n C/C++ prin dou instruciuni:
1. Instruciunea de decizie simpl (transcrie din pseudocod instruciunea
dac atunci)
Sintaxa:
if (expresie)
instr1;
[ else
opional
instr2;]
Instruciunea evalueaz expresia logic, dac este adevrat (1) execut intr1 iar
dac nu execut instr2 dac ramura de altfel este prezent iar n caz contrar nu
execut nimic.
Exemplu 1: Determinarea valorii maxime dintre 2 valori ntregi a i b citite (cu
ramur de else)
int a,b;
cin>>a>>b;
if (a>b)
cout<<a;
else
cout<<b;
Exemplul 2: Determinarea valorii maxime dintre 2 valori ntregi a i b citite (fr
ramur de else)
int a,b,max;
cin>>a>>b;
max=a;
if (max<b)
max=b;
cout<<max;
Observaie:
ntotdeauna ramura de else dac exist se va asocia celui mai din interior
if.
Exemplu: Evitarea unei asocieri nedorite pentru ramura de else se poate realiza
n dou moduri:
31
cu instruciune compus
int a,b,c;
cin>>a>>b>>c;
if(a>b)
if(b>c)
cout<<a;
else; //instr. vid nu execut nimic
else
cout<<a este mai mic dect b;
int a,b,c;
cin>>a>>b>>c;
if(a>b)
{
if(b>c)
cout<<a;
}
else
cout<<a este mai mic dect b;
Execuie: Se verific la fiecare pas condiia i dac dac rezultatul logic este 1
(TRUE) se vor executa n ordinea n care apar instruciunile iar n caz contrar se
iese din repetitiv.
Observaii:
- instruciunea while poate s nu se execute niciodat dac valoarea de
adevr a condiiei este 0.
- dac n corpul instruciunii while avem mai mult de o instruciune, aceste
se grupeaz ntr-o instruciune compus
Instruciunea dowhile
Sintax:
do
{
instruciuni;
} while(condiie);
Execuie: Se vor executa n ordinea n care apar instruciunile apoi se verific
condiia i dac rezultatul logic este 1 (TRUE) se continu cu execuia
instruciunilor iar n caz contrar se iese din repetitiv.
Observaie: Diferena ntre repetitive cu test iniial i cea cu test final este aceea
c repetitiva cu test final se execut ntotdeauna cel puin o dat.
1,3,5, j=2
33
Exemplu
s=0;
for(;x!=0;x=x/10)
s=s+x%10;
s=0;
while(x!=0)
{
s=s+x%10;
x=x/10;
}
Exemplu
for(s=0;x!=0;s=s+x%10,x=x/10); // realizeaz suma cifrelor lui x
Aplicaii:
1) Se considera n numr natural. Calculai i afiai numrul de cifre.
Subprograme (Funcii)
2 tipuri:
- returneaz un rezultat
- calculeaz mai multe valori, nu returneaz nimic
Sintaxa:
tip identificator_fc( [lista de parametri formali] )
{
Return expresie; // expresie are tipul tip
}
Lista de p.f : tip id_var,, tip id_var
34
Apelul funciei:
- se face n interiorul unei expresii de forma:
variabil=id_fc([lista de parametri efectivi]);
sau cout<< id_fc([lista de parametri efectivi]);
lista de parametri efectivi: id_var1,,id_varn
Sintaxa:
Void identificator_fc( [lista de parametri formali] )
{
}
Lista de p.f : tip id_var,, tip id_var
Apelul funciei:
Id_fc([list de parametri efectivi]);
1) int suma(int n)
n=n/10;
int s=0;
return s;
While(n!=0)
{
s=s+n%10;
35
n=n/10;
void suma(int n)
cout<<s;
int s=0;
While(n!=0)
apelul n main
suma(n);
s=s+n%10;
36
apelul n main
int sum=suma(n);
sau
cout<<suma(n);
Transmiterea parametrilor:
- prin valoare(se poate modifica parametrul n interiorul funciei, la ieire se
revine la valoarea iniial)
- prin referin( se modific valoarea de la adresa stabilit a parametrului, la
ieire valoarea modificat rmne)
void suma(int n, int &s)
{
While(n!=0)
{
s=s+n%10;
n=n/10;
}
}
apelul n main
int s=0;
suma(n,s);
cout<<setw(4)<<a[i][j];
cout<<setprecision(2)<<a[i];
a[i] *(a+i)
a&a[0]
Tipul pointer
Am nvat nc din clasa a IX-a, c o variabil este o dat caracterizat prin trei
atribute: tip, valoare i adres. Primele dou atribute au fost foarte ntlnite pn
acum. Atributul "adres" va face obiectul noiunilor din acest capitol. Pentru nceput,
considerm un exemplu foarte simplu, o variabil de tip ntreg care se declar astfel:
int x; // se rezerv n memorie 2 octei
Toate variabilele unui program sunt memorate n aa-numita memorie intern
RAM. Aceasta este mprit n nite "csue", numite locaii de memorie sau celule de
memorie. Fiecare locaie reprezint un octet i se caracterizeaz printr-o anumit
adres. Adresele locaiilor de memorie sunt numere exprimate n (baza 16).
n urma declarrii unei variabile, se rezerv pentru aceasta un numr de octei
succesivi n memoria intern RAM (locaii succesive), numr care depinde de tipul
variabilei i de implementare.
Spaiul de memorie alocat unei variabile rmne ocupat pe toat durata
programului sau subprogramului (funciei) n care a fost declarat variabila. O astfel de
variabil se numete "variabil alocat static", iar procesul de rezervare de memorie
este de ctre compilator i se numete "alocare static a memoriei".
De ce se aloc memorie pentru variabila x declarat mai sus?
Dup declarare, variabila x poate primi ca valori numere ntregi, prin atribuire sau
prin citire. n momentul n care variabila a primit o valoare, acea valoare va
memorat n zona de memorie alocat variabilei.
O alt posibil declarare a variabilei x este urmtoarea: declaram o variabil x
care va conine adresa de memorie a unui numr ntreg ( valoarea variabilei x va
adresa la care se va depozita numrul ntreg n memoria RAM
Variabila x se numete pointer ctre un ntreg sau referin ctre un ntreg.
Firete c tipul de date al variabilei x nu va mai int, ci un tip de date numit tipul
pointer ctre un ntreg sau tipul referin ctre un ntreg; acesta se declar astfel:
int *x; // x este un pointer ctre un ntreg
Caracterul * reprezint operatorul de adresare, este un operator unar, adic se
aplic unui singur operand.
Observaie:
Operatorul de adresare este identic ca i scriere cu cel de nmulire dar compilatorul nu
va face confuzie deoarece operatorul de nmulire este binar.
Sintaxa de declarare pointerilor este:
tip *identificator1,*identificator2,* identificatorn;
unde tip este tipul de date pe care-I refer pointerii iar identificator 1,identificator2,
identificatorn sunt identicatorii variabilelor de tip pointer
Exemple:
float *a, *b; // a i b sunt pointeri ctre tipul float (pointeri ctre numere reale)
char *c ;
// c este pointer ctre tipul caracter
Dac pointerul x conine adresa unui numr, numrul se va memora efectiv ntr-o
"variabil pereche" (*x) pe care o creeaz automat compilatorul cnd declarm
pointerul x. "Perechea" *x se numete variabil alocat dinamic.
adreseaz
x
adresa numrului ntreg
(pointer ctre numr)
*x
numrul ntreg (variabila alocat dinamic)
Observaie:
Nu s-a alocat i nici eliberat memoria pentru pointerul x pentru c este exact
zona de memorie ocupat de variabila a care se elibereaz la sfritul execuiei
programului.