Documente Academic
Documente Profesional
Documente Cultură
PROGRAMARE 1
Curs nr. 11
Capitolul 3. Pointeri 3.
Pointer și structuri. Pointer la pointer
Pointeri la structuri
struct S {
//Declararea membrilor structurii
double b;
int a;
};
Pointeri la structuri
ps = &s1; // Inițializare cu adresa unei variabile
ps->a = 5;
ps ->b = ps->a / 7;
scanf(“%lf”, &ps->b);
printf(“%d\n”, ps->a);
1
Pointeri la structuri
ps1 = ps; //Inițializare cu valoarea unui alt pointer
Pointeri la structuri
ps2->b = 17.5;
scanf(“%d”, &ps2->a);
printf(“%d\n”, ps2->a);
…...................
free(ps2);
ps2 = 0;
.
.
Pointeri la structuri
struct DATA {
int zi, an;
char *luna;
};
2
Pointeri la structuri
ps -> an = 2018;
astazi.an = 2018;
ps -> zi = 25;
astazi.zi = 5;
printf("Anul este %d si ziua %d.\n", ps->an, ps->zi);
Pointeri la structuri
ps->luna = (char *)malloc(15*sizeof(char));
if(ps->luna == 0)
{
fprintf(stderr, “Alocare esuată\n”);
exit(EXIT_FAILURE);
}
…...................................
Dealocare
free(astazi.luna);
astazi.luna = 0;
Pointeri la structuri
free(ps->luna);
ps->luna = 0;
free(ps);
ps = 0;
3
Pointeri la structuri
q Vom considera aceeași structură DATA
Pointeri la structuri
pd[2].luna = (char*)malloc(strlen(“mai”)+1)*sizeof(char));
if(pd[2].luna == 0)
{
fprintf(stderr, “Alocare esuată\n”);
exit(EXIT_FAILURE);
}
free(pd[2].luna);
pd[2].luna = 0;
free(pd);
pd = 0;
Pointeri la structuri
struct DATA zile[15];
zile[3].zi = 20;
printf(“%d”, (zile+3)->zi);
*(zile+3)->zi
4
Pointer la pointer
T *tab[100]
tab
tab[0] i1 i2 i3 i4
tab[1]
. j1 j2 j3 j4 j5 j6
.
.
tab[99] k1 k2
Pointer la pointer
tab
tab[0] i1 i2 i3 i4
tab[1]
tab[2] j1 j2 j3 j4 j5 j6
k1 k2
Pointer la pointer
tab tab[0] + 3
tab[0] i1 i2 i3 i4 i5
tab[1] j1 j2 j3 j4 j5
tab[2] k1 k2 k3 k4 k5
T** tab;
5
Matrice alocate dinamic
6
Matrice alocate dinamic
7
Matrice alocate dinamic - exemplu
Să se scrie un program care folosind matrice alocate dinamic,
ordonează liniile unei matrice de numere întregi în ordinea
crescătoare a elementului maxim de pe fiecare linie.
Exemplu:
-1 0 1 0 -1 -2
2 3 1 à -1 0 1
0 -1 -2 2 3 1
#endif
8
Matrice alocate dinamic – exemplu - alocare.c
#include <stdlib.h>
#include “alocare.h”
9
Matrice alocate dinamic – exemplu – matrice.h
#ifndef MATRICE_H_
#define MATRICE_H_
#endif
10
Matrice alocate dinamic - exemplu – matrice.c
void afisareMatrice(int **a, int n, int m, char *den)
{
int i, j;
printf("Matricea %s este\n", den);
for(i=0; i<n; ++i)
{
for(j=0; j<m; ++j)
{
printf("%4d ", *(*(a+i)+j));
}
printf("\n");
}
}P1 Curs nr. 11 - 2019 31
11
Matrice alocate dinamic - exemplu – matrice.c
int main(void)
{
int **a = 0;
int n, m;
12
Matrice alocate dinamic - exemplu – p11.c
do {
printf("Nunarul de linii din matrice: ");
scanf("%d", &n);
printf("Numarul de coloane din matrice: ");
scanf("%d", &m);
} while(n<=0 || m<=0);
a = citireMatrice(n, m, "A");
afisareMatrice(a, n, m, "A");
sortareMatrice(a, n, m);
dealoca2d(a,n);
a=0;
return 0;
}
13