W12 dynamiczne tablice 2d

W12 dynamiczne tablice 2d, PWR - Informatyka W4, podstawy programowania
[ Pobierz całość w formacie PDF ]
Przykłady dynamicznego tworzenia i usuwania

Ŝ
nych wariantów tablicy dwuwymiarowej
®
int [2][3]
Przykład A)
dla porównania
®
zwykła tablica dwuwymiarowa
int tab_A [ 2 ] [ 3 ];
//
przykładowe operacje
tab_A[0][0] = 200;
tab_A[0][1] = 201;
tab_A[1][0] = 210;
tab_A[1][1] = tab_A[1][2];
//
nie trzeba oprogramowywa
ć
operacji usuwania tablicy
A
//
bo jej tworzenie i usuwanie jest realizowane przez kompilator !
}
Przykład B)
Wska
ź
nik na dwuwymiarow
ą
dynamiczn
ą
tablic
ę
liczb całkowitych
Uwaga: taka reprezentacja jest bardzo niewygodna w zapisie,
bo wsz
ę
dzie trzeba dopisywa
ć
operator „gwiazdki” lub [0]
void main( )
{
int (*tab_B) [ 2 ] [ 3 ];
tab_B = new int[1][2][3]; //
dynamiczna alokacja tablicy tab_B
//
przykładowe operacje na takiej tablicy B
(*tab_B)[0][0] = 200; //
tab_B[0][0][0] = 200;
(*tab_B)[0][1] = 201; //
tab_B[0][0][1] = 201;
(*tab_B)[1][0] = 210; //
tab_B[0][1][0] = 210;
(*tab_B)[1][1] = (*tab_B)[1][2]; //
tab_B[0][1][1] = tab_B[0][1][2];
delete [ ] tab_B; //
zwolnienie pami
ę
ci
}
#include <alloc.h> //
to samo, za pomoc
ą
tradycyjnych funkcji malloc i free
tab_B = ( int(*)[2][3] )malloc( 2*3*sizeof(int) ); //
utworzenie
(*tab_B)[0][0] = 200; //
tab_B[0][0][0] = 200;
free( tab_B ); //
zwolnienie
M. Piasecki: JĘZYKI PROGRAMOWANIA (1)
- 1 -
(W12) Dynamiczne tablice 2D
void main( )
{
int tab_A [ 2 ] [ 3 ];
int tab_A [ 2 ] [ 3 ];
int (*tab_B) [ 2 ] [ 3 ];
int (*tab_B) [ 2 ] [ 3 ];
Przykład C)
Wska
ź
nik na pierwsz
ą
3-elementow
ą
tablic
ę
(pierwsz
ą
z dwóch)
void main( )
{
int (*tab_C) [ 3 ];
int (*tab_C) [ 3 ];
//
dynamiczna alokacja tablicy tab_C
tab_C[0][0] = 200;
//
przykładowe operacje na tablicy tab_C
tab_C[0][1] = 201;
tab_C[1][0] = 210;
tab_C[1][1] = tab_C[1][2];
delete [ ] tab_C;
//
zwolnienie pami
ę
ci tab_C
}
#include <alloc.h> //
to samo, za pomoc
ą
tradycyjnych funkcji malloc i free
tab_C = ( int(*)[3] ) malloc( 2*3*sizeof(int) );
//
utworzenie
tab_C[0][0] = 200;
free( tab_C );
//
zwolnienie
Przykład D)
Zwykła dwuelementowa tablica wska
ź
ników na dynamiczne tablice liczb
int *tab_D [ 2 ];
tab_D[0] = new int [3]; //
pierwszy wiersz
int *tab_D [ 2 ];
dynamiczna alokacja
tab_D[1] = new int [3]; //
drugi wiersz
tab_D[0][0] = 200; //
przykładowe operacje na tablicy tab_D
tab_D[0][1] = 201;
tab_D[1][0] = 210;
tab_D[1][1] = tab_D[1][2];
delete [ ] tab_D[0]; //
pierwszy wiersz
¬
zwolnienie pami
ę
ci
delete [ ] tab_D[1]; //
drugi wiersz
}
#include <alloc.h> //
to samo, za pomoc
ą
tradycyjnych funkcji malloc i free
tab_D[0] = (int*)malloc(3*sizeof(int)); tab_D[1] = (int*)malloc(3*sizeof(int));
tab_D[0][0] = 200;
free( tab_D[0] ); free( tab_D[1] );
M. Piasecki: JĘZYKI PROGRAMOWANIA (1)
- 2 -
(W12) Dynamiczne tablice 2D
int (*tab_C) [ 3 ];
tab_C = new int [2][3];
void main( )
{
int *tab_D [ 2 ];
¬
Przykład E)
Wska
ź
nik na dynamiczn
ą
(dwuelementow
ą
) tablic
ę
wska
ź
ników,
na dynamiczne (trzyelementowe) tablice liczb całkowitych
void main( )
{
int **tab_E;
//
Dwuetapowe tworzenie tablicy -> najpierw tablica z adresami wierszy
tab_E = new int* [2]; //
tablica dwóch wska
ź
ników
//
dopiero potem,
dwie tablice zawieraj
ą
ce wiersze
tab_E[0] = new int [3]; //
pierwszy wiersz
tab_E[1] = new int [3]; //
drugi wiersz
tab_E[0][0] = 200; //
przykładowe operacje na tablicy E
tab_E[0][1] = 201;
tab_E[1][0] = 210;
tab_E[1][1] = tab_E[1][2];
//
zwolnienie obszaru zajmowanego przez tablic
ę
E
delete [ ] tab_E[0]; //
zwolnienie pierwszego wiersza
delete [ ] tab_E[1]; //
zwolnienie drugiego wiersza
delete [ ] tab_E ; //
dopiero na koniec, zwolnienie tablicy wska
ź
ników
}
//
zazwyczaj operacja alokowania i zwalniania wierszywykonywana jest w p
ę
tli:
for( int i=0; i<ILOSC_WIERWSZY; i++)
delete [ ] tab_E[ i ]; //
zwolnienie i-tego wiersza
delete [ ] tab_E ; //
dopiero na koniec, zwolnienie tablicy wska
ź
ników
#include <alloc.h> //
to samo, za pomoc
ą
tradycyjnych funkcji malloc i free
tab_E = (int**)malloc( 2*sizeof(int*) ); //
tworzenie tablicy wska
ź
ników
tab_E[0] = (int*)malloc( 3*sizeof(int) ); //
pierwszy wiersz
tab_E[1] = (int*)malloc( 3*sizeof(int) ); //
drugi wiersz
tab_E[0][0] = 200; //
przykładowe operacje na tablicy E
//
zwolnienie obszaru zajmowanego przez tablic
ę
E
free( tab_E[0] ); //
zwolnienie pierwszego wiersza
free( tab_E[1] ); //
zwolnienie drugiego wiersza
free( tab_E ); //
dopiero na koniec, zwolnienie tablicy wska
ź
ników
M. Piasecki: JĘZYKI PROGRAMOWANIA (1)
- 3 -
(W12) Dynamiczne tablice 2D
int **tab_E;
int **tab_E;
[ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • diabelki.xlx.pl
  • Podobne
    Powered by wordpress | Theme: simpletex | © Spojrzeliśmy na siebie szukając słów, które nie istniały.