mieczyk - 04-12-2007 22:26:27

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:

Kod:

/* 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:

Kod:

/* 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ć... :)

www.chelpdesk.pun.pl