operatii cu pointeri

Upload: alex-paul

Post on 08-Apr-2018

256 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/7/2019 Operatii cu pointeri

    1/17

    Operaii cu pointeri

    Operatori care se aplic asupra pointerilor

  • 8/7/2019 Operatii cu pointeri

    2/17

    05.04.2011 2

    Operatori specifici pointerilor

    Nume Simbol Rol Utilizare

    Operator derefereniere

    * Definirea de tipuri dedat pointer

    tip * int*

    float* int**

    Operator derefereniere

    & Extrage adresa uneivariabile

    &a

    Operator dederefereniere * Acceseaz zona dememorie indicat de unpointer

    *p

  • 8/7/2019 Operatii cu pointeri

    3/17

    05.04.2011 3

    Operatori specifici pointerilor

    int* p, a, *q;int* p, a, *q;

    p = &a;p = &a;

    q = p;q = p;

    *q = 7;*q = 7; pp100100

    aa104104

    qq106106

    77104104 104104

  • 8/7/2019 Operatii cu pointeri

    4/17

    05.04.2011 4

    Atribuire

    Operatorul de atribuire =

    Numai ntre pointeri de acelai tip

    int *p, *q;

    float *r, *s;

    p = q;

    r = s;

    p = r;

    s = q;

  • 8/7/2019 Operatii cu pointeri

    5/17

    05.04.2011 5

    Operaii aritmetice cu pointeri

    Unitate: dimensiunea zonei de memorie ctrecare indic pointerul

    noiunea e definit doar pentru pointerii cu tip

    int *p, a;

    p = &a;

    float *q, b;

    q = &b;

    pp100100

    aa104104

    pp100100

    bb104104

  • 8/7/2019 Operatii cu pointeri

    6/17

    05.04.2011 6

    Incrementare / decrementare

    Modificarea valorii operandului cu o unitate

    int a, b, c, *p; aa

    200200

    pp

    206206

    bb

    202202

    cc

    204204p = &a; 20420420

    2202

    p++;

    p--;

  • 8/7/2019 Operatii cu pointeri

    7/17

    05.04.2011 7

    Incrementare / decrementare

    Modificarea valorii operandului cu o unitate

    float a, b, c, *p;

    p = &a;

    p++;

    p--;

    aa330000

    bb330044

    pp330000

    cc330088

    330404330088

  • 8/7/2019 Operatii cu pointeri

    8/17

    05.04.2011 8

    Adunarea / scderea unui numr ntreg

    int a[10], *p, *q;

    p = &a[0];

    p + 5

    q = p + 5;

    p = q - 2;

    pp222200

    qq224224

    aa200200 202202 204204 206206 210210208208 212212 214214 216216 218218

    200200 210210p + 5p + 5

    206206

  • 8/7/2019 Operatii cu pointeri

    9/17

    05.04.2011 9

    Adunarea / scderea unui numr ntreg

    float a[10], *p, *q;

    p = &a[0];

    p + 5

    q = p + 5;

    p = q - 2;

    pp242400

    qq244244

    aa200200 204204 208208 212212 220220216216 224224 228228 232232 236236

    200200 220220p + 5p + 5

    212212

  • 8/7/2019 Operatii cu pointeri

    10/17

    05.04.2011 10

    Operatori relaionali

    Toi operatorii relaionali: , =, ==, !=

    Valoarea nul pentru pointeri (pointerul nul)

    NULL

    Pointer nul neiniializat Atenie: nu se poate dereferenia un pointer nul!

    int *p;

    if( p == NULL ) //nul, nu se poate lucra cu el

    else //nenul, poate fi accesat zona indicat de el

    if( !p)

  • 8/7/2019 Operatii cu pointeri

    11/17

    05.04.2011 11

    Alocarea dinamic a memoriei

    Se include

    malloc.h (Visual C)

    Funcii importante

    malloc

    tip *p;

    p = (tip*) malloc(dimensiune);

    free

    free(p);

  • 8/7/2019 Operatii cu pointeri

    12/17

    05.04.2011 12

    Alocarea dinamic a memoriei

    int *p;float *q;

    p = ( int* ) malloc (sizeof(int));

    *p = 33;

    q = ( float* ) malloc (sizeof(float));

    free(p);

    pp100100

    qq104104

    10001000

    10001000

    SD / SSSD / SS HeapHeap

    74007400 74007400

    3333

  • 8/7/2019 Operatii cu pointeri

    13/17

    05.04.2011 13

    Legtura dintre vectori i pointeri

    int a[10];

    int *p;

    p = a;

    a = p;

    p = a + 6;

    aa200200 202202 204204 206206 210210208208 212212 214214 216216

    pp220220

    200200200200

    aa

    *(a+5)*(a+5) a[5]a[5]

    a+5a+5

    a+5a+5*(a+5)*(a+5)

    *(p+5)*(p+5) p[5]p[5]*(p+5)*(p+5)p+5p+5

    p+5p+5 pp

    p[0]p[0] p[2]p[2]

  • 8/7/2019 Operatii cu pointeri

    14/17

    05.04.2011 14

    Legtura dintre matrice i pointeri

    int a[5][5];

    int **p;

    p = a;

    0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 40 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

    ppaa

    p[3][2]p[3][2] *(p+3)*(p+3)p+3p+3

    p+3p+3

    *(*(p+3)+2)*(*(p+3)+2)

    a+3a+3a[3][2]a[3][2] *(a+3)+2*(a+3)+2

    a+3a+3

    *(a+3)*(a+3)

    *(a+3)+2*(a+3)+2

    *(*(a+3)+2)*(*(a+3)+2)a[3][0]a[3][0]

    ???

  • 8/7/2019 Operatii cu pointeri

    15/17

    05.04.2011 15

    Vectori alocai dinamic

    Vector dinamic

    Declarare

    tip* p; Alocare

    p = (tip*) malloc( n * sizeof(tip));

    Utilizare

    p[i] Eliberare (dezalocare)

    free(p);

    Vector dinamic

    Declarare

    tip p[dim];

    Alocare

    -

    Utilizare

    p[i] Eliberare (dezalocare)

    -

  • 8/7/2019 Operatii cu pointeri

    16/17

    05.04.2011 16

    Matrice alocate dinamic

    tip **p;tip **p; //*(p+i)//*(p+i) --> adresa liniei cu indicele> adresa liniei cu indiceleii(i=0..n(i=0..n--1)1)

    p = (tip**) malloc(n*sizeof(tip*));p = (tip**) malloc(n*sizeof(tip*));

    for(=0;i

  • 8/7/2019 Operatii cu pointeri

    17/17

    Spor la nvat!