CATEGORII DOCUMENTE |
Exista doi operatori unari care permit utilizarea variabilelor pointer:
q & - operatorul adresa (de referentiere) - pentru aflarea adresei din memorie a unei variabile;
q - operatorul de indirectare (de deferentiere) - care furnizeaza valoarea din zona de memorie spre care pointeaza pointerul operand.
Sintaxa declaratiei unui pointer de date este:
tip *identificator_pointer;
Simbolul * precizeaza ca identificator_pointer este numele unei variabile pointer de date, iar tip este tipul obiectelor a caror adresa o va contine.
Exemplu:
int u, v, *p, *q; // *p, *q sunt pointeri de date (catre int)
double a, b, *p1, *q1; // *p1, *q1 sunt pointeri catre date de tip double
Operatorul '*' se numeste operatorul de referentiere si este aplicat unei adrese, intorcand valoarea memorata la acea adresa.
De exemplu, in declaratia:
int *n;
n este adresa unei variabile de tip intreg, iar *n este valoarea memorata la adresa n.
OBSERVATIE: Orice adresa este memorata sub forma unui numar intreg, pe 2, 4 sau 8 octeti (in mod implicit 2)
Operatorul invers se noteaza '&' si se numeste operatorul de dereferentiere (operatorul adresa)
De exemplu instructiunea: &x=y are semnificatia: adresa lui x ia valoarea y.
//Pointeri - exemple
#include<iostream.h>
void main()
Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.
//Pointeri si sirurie de caractere
#include <iostream.h>
#include<conio.h>
void main(void)
In limbajul C, cazul parametrilor tablou constituie o exceptie de la regula transferului parametrilor prin valoare. Numele unui tablou reprezinta, de fapt, adresa tabloului, deci a primului element din tablou.
Sa se scrie urmatorul program (care ilustreaza legatura dintre pointeri si vectori) si sa se urmareasca rezultatele executiei acestuia.
#include <iostream.h>
void main(void)
; int *pi1 = a;
int *pi2 = &a[0]; int *pi3;
cout<<'a='<<a<<'&a='<<&a<<'*a='<<*a<<'n';
cout<<'a+1='<<(a+1)<< ' &a[1]='<< &a[1]<<'n';
cout<<'a[1]='<<a[1]<< ' *(a+1)='<< *(a+1)<<'n';
cout<<'pi1='<<pi1<<'pi2='<<pi2<<'n';
int x=*pi1; /* x primeste valoarea locatiei a carei adresa se afla in variabila pointer pi1, deci valoarea lui a[0] */
cout<<'x='<<x<<'n';
x=*pi1++; // x = *pi1 = a[0] = 0, iar apoi *pi1= a[1] = 1
cout<<'x='<<x<<'n';
x=(*pi1)++; /* x = 1: intai atribuirea, apoi incrementarea valorii spre care indica pi1.
In urma incrementarii, valoarea lui a[1] devine 2
cout<<'x='<<x<<'n'; cout<<*pi1<<'n';
x=*++pi1; //echivalent cu *(++pi1)
cout<<'x='<<x<<'n';
x=++(*pi1); cout<<'x='<<x<<'n'; pi1=a;
pi3=pi1+3;
cout<<'pi1='<<pi1<<'*pi1='<<*pi1<<'&pi1='<<&pi1<<'n';
cout<<'pi3='<<pi3<<'*pi3='<<*pi3<<'&pi3='<<&pi3<<'n';
cout<<'pi3-pi1='<<(pi3-pi1)<<'n'; //pi3-pi1=3
//Pointer la vector
#include <iostream.h>
#define DIM 3
float cere_element(int i)
void afis_tablou(float *ptablou)
void main()
#include<iostream.h>
#include<conio.h>
void main()
clrscr();
cout<<'a='<<a<<' &a='<<&a<<' &a[0]='<<&a[0]<<'n';
cout<<'Pointeri catre vectorii liniin';
for (int i=0; i<3; i++)
// afisarea matricii
for (int i=0; i<3; i++)
//Pointer la matrice
#include <iostream.h>
#define DIM1 3
#define DIM2 2
float cere_element(int i,int j)
void afis_tablou(float **ptablou)
void main()
In ce consta operatia de incrementare a pointerilor ?
Tablouri de pointeri.
Ce sunt pointerii generici ?
Ce operatii se pot realiza asupra variabilelor pointer ?
De ce numele unui pointer este rvalue ?
Ce fel de variabile pot constitui operandul operatorului de deferentiere ?
Operatorul de referentiere.
Unui pointer generic i se poate atribui valoarea unui pointer cu tip ?
Care este legatura intre tablouri si pointeri ?
De ce numele unui tablou este lvalue ?
Sa se implementeze programele cu exemplele prezentate.
Sa se scrie programele pentru exercitiile rezolvate care au fost prezentate.
Analizati urmatoarele secvente de instructiuni. Identificati secventele incorecte (acolo unde este cazul) si sursele erorilor:
q int a,b,*c; a=7; b=90; c=a;
q double y, z, *x=&z; z=&y;
q char x, **p, *q; x = 'A'; q = &x; p = &q; cout<<"x="<<x<<'n';
cout<<"**p="<<**p<<'n'; cout<<"*q="<<*q<<'n';
cout<<"p="<<p<<" q="<<q<<"*p="<<*p<<'n';
q char *p, x[3] = ; int i, *q, y[3] = ;
p = &x[0];
for (i = 0; i < 3; i++)
q = &y[0];
for (i = 0; i < 3; i++)
q const char *sirul="sa programam"; *(sirul)++;
q double a, *s; s=&(a+89); cout<<"s="s<<'n';
q double a1, *a2, *a3; a2=&a1; a2+=7.8; a3=a2; a3++;
q int m[10], *p;p=m;
for (int i=0; i<10; i++)
cout<<*m++;
q void *p1; int *p2; int x; p2=&x; p2=p1;
q char c='A'; char *cc=&c; cout<<(*cc)++<<'n';
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1020
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved