File: Stare vježbe/vjezbe10/63a__malloc_2Dpolja.c
/* 63a__malloc_2Dpolja.c Rad s dinamicki alociranim dvodimenzionalnim poljima -- 1. metoda, Upoznavanje kljucne rijeci typedef ----- Ova metoda koristi identifikaciju dvodimenzionalnog polja s pokazivacem na jednodimenzionalno polje od MAXSTUP elemenata. Nezgodna strana ovakvog pristupa jest to sto nam da bismo mogli alocirati memoriju za dvodimenzionalno polje velicina retka (odnosno maksimalni broj stupaca) mora biti poznata prilikom compiliranja. */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MAXSTUP 20 /* Naredba typedef sluzi za definiciju novog tipa. Obicno ju koristimo kako bismo uveli pokratu za neki slozeni tip podatka. Sintaksa: typedef slozeni_tip pokrata Slijedecom linijom redak ce postati tip koji predstavlja jednodimenzionalno polje od MAXSTUP elemenata. */ typedef float redak[MAXSTUP]; void check(void* p) { if(p == NULL) { printf("Greska u alokaciji memorije!\n"); exit(1); } } void unos(redak* A, int m, int n) { int i, j; for(i=0; i<m; i++) for(j=0; j<n; j++) { scanf("%f", &A[i][j]); } } void ispis(redak* A, int m, int n) { int i, j; for(i=0; i<m; i++) { for(j=0; j<n; j++) } } int main() { int m, n, i; /* Deklariramo dvodimenzionalno polje kao pokazivac na redak, odnosno pokazivac na jednodimenzionalno polje od MAXSTUP elemenata. */ redak* A; printf("Unesite broj redaka matrice A: "); scanf("%d", &m); printf("Unesite broj stupaca matrice A: "); scanf("%d", &n); /* Alociramo memoriju za matricu A s m redaka i unaprijed odredjenih MAXSTUP stupaca */ A = (redak*) malloc(m*MAXSTUP*sizeof(float)); check(A); for(i=0; i<m; i++) printf("Adresa %d. retka: %d\n", i, A [i ]); unos(A, m, n); ispis(A, m, n); /* Oslobadjanje alocirane memorije */ free(A); return 0; }
|