C Helpdesk
Dwa poniższe przykłady prezentują przekazywanie tablicy dwuwymiarowej do funkcji. Pierwszy przykład jest mało elegancki, ponieważ z góry znamy rozmiar tablicy. Drugi natomiast opiera się o dynamiczną alokację pamięci.
I przykład:
/* Przekazywanie tablicy dwuwymiarowej do funkcji */ /* Sposob I */ #include <stdio.h> #include <stdlib.h> void wyswietl(int tab[][2], int x, int y) { int i,j; for(i=0; i<x; i++) for(j=0; j<y; j++) printf("%d\n", tab[i][j]); } int main() { int tab[3][2]; int i,j; int x=3; int y=2; srand(time(0)); for(i=0; i<x; i++) for(j=0; j<x; j++) tab[i][j] = rand()%100; wyswietl(tab, x, y); getchar(); return 0; }
II przykład:
/* Przekazywanie tablicy dwuwymiarowej do funkcji */ /* Sposob II */ #include <stdio.h> #include <stdlib.h> void wyswietl(int **tab, int x, int y) { int i,j; printf("Tablica %dx%d\n\n", x,y); for(i=0; i<x; i++) { for(j=0; j<y; j++) printf("%d ", tab[i][j]); printf("\n"); } } int main() { srand(time(0)); int **tab; int i,j; /* Losowanie wymiarow tablicy */ int x = 1+rand()%20; int y = 1+rand()%20; /* Alokowanie potrzebnej pamięci */ tab = (int**)malloc(x*y*sizeof(int*)); for(i=0; i<x; i++) tab[i] = (int*)malloc(y*sizeof(int)); /* Wypelnianie tablicy losowami liczbami */ for(i=0; i<x; i++) for(j=0; j<y; j++) tab[i][j] = rand()%100; /* Wyswietlanie tablicy */ wyswietl(tab, x, y); /* Zwalnianie pamieci */ for(i=0; i<x; i++) free(tab[i]); free(tab); getchar(); return 0; }
Tutaj jednak, nie jestem pewien czy dobrze zwalniam pamięć. Jeżeli nie, zawsze można mnie poprawić...
Ostatnio edytowany przez mieczyk (04-12-2007 20:27:49)
Offline