Jęyk c

robertm19
Użytkownik
Użytkownik
Posty: 1847
Rejestracja: 8 lip 2008, o 21:16
Płeć: Mężczyzna
Lokalizacja: Staszów/Warszawa
Podziękował: 7 razy
Pomógł: 378 razy

Jęyk c

Post autor: robertm19 »

Czy dobrze zdeklarowałem tablicę?
int **tablica;
int i;

tablica=(int**)malloc(5*sizeof(int *));
for(i=0; i
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Jęyk c

Post autor: soku11 »

Tak. W ten sposob stworzyle tablice 5x5. Oczywiscie trzeba pamietac, zeby ja rowniez poprawnie skasowac Pozdrawiam.
Awatar użytkownika
eloar
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 18 cze 2007, o 16:59
Płeć: Mężczyzna
Lokalizacja: Kobyłka
Podziękował: 8 razy
Pomógł: 12 razy

Jęyk c

Post autor: eloar »

To bardzo zly sposob deklarowania dynamicznej tablicy. Zostala naruszona zasada tworzenia tablic. Podstawowa cecha tablic, jest ciaglosc obszaru. Ta metoda tego nie gwarantuje. Ponadto konieczne bedzie usuwanie jej po kawalku, tymczasem jesli zadeklarujesz spojny obszar i przydzielisz go odpowiednio do wierszy, to nie bedzie problemow z usuwaniem zadnych. skasujesz korzystajac ze wskaznika na poczatek calego obszaru.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Jęyk c

Post autor: soku11 »

Niby tak, jednak w C troche trudno by bylo to zaimplementowac (odwolanie do jej elementow byloby nie takie oczywiste). W C++ natomiast mozna sie pokusic o takie rozwiazanie tworzac klase i przeciezyc operatory, co by bylo bardziej zrozumiale Pozdrawiam.
gawi
Użytkownik
Użytkownik
Posty: 96
Rejestracja: 10 mar 2007, o 14:12
Płeć: Mężczyzna
Lokalizacja: O-ka
Podziękował: 29 razy
Pomógł: 1 raz

Jęyk c

Post autor: gawi »

Tak można zdefiniować tablice która zachowuje ciągłość w pamięci:

Kod: Zaznacz cały

#include<stdlib.h>
#define ROZMIAR 5

int main(void)
{
   int **tab=malloc(ROZMIAR*sizeof(*tab));
   int i;

   *tab=malloc(ROZMIAR*ROZMIAR*sizeof(**tab));
   for(i=1;i<ROZMIAR;++i)
        tab[i]=tab[0]+i*ROZMIAR;
   return 0;
}
ODPOWIEDZ