Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

tablice dynamiczne w ansi c

panktos 27 Oct 2004 00:12 6021 12
  • #1
    panktos
    Level 11  
    w c++ wyglada to tak:

    long int* tab = new long int[t];

    a jak bedzie to wygladac w ansi c? bo gcc nie chce mi przmielic "new".;/
  • #2
    adames80
    Level 18  
    long *int tab = malloc(long int[t])
  • #3
    panktos
    Level 11  
    a co kiedy tablica miala by byc dwuwymiarowa?
  • #4
    krzkomar
    Level 25  
    A nie powinno to raczej być tak ?

    long int *tab = (long int *) malloc(sizeof(long int) * t );

    a dla 2 wymiarów xx i yy:

    long int *tab = (long int *) malloc(sizeof(long int) * xx*yy );

    A czemu piszesz w C jak jesteś przyzwyczajony do C++ ?
  • #5
    h-doc
    Level 27  
    też nie jest dobrze. Dla jednego wymiaru się zgadzam. Ale dla dwóch wymiarów jest źle - w tym przypadku nie będziesz mógł stosować dwóch indeksów tablicy. Dla dwóch wymiarów moim zdaniem powinno być tak:

    typedef long int VECTOR [];
    VECTOR *tab = (VECTOR*)malloc(sizeof(VECTOR)*yy);
  • #6
    Xitami
    Level 29  
    h-doc: jeżeli yy jest równe np. 10, to ile pamięci przydzieli malloc?
  • #7
    ghost666
    Translator, editor
    10 * ilosc pamieci zajmowanej przez jedną zmienną w wypadku long integera jest to AFAIR 16 bitów
  • #8
    krzkomar
    Level 25  
    h-doc wrote:
    też nie jest dobrze. Dla jednego wymiaru się zgadzam. Ale dla dwóch wymiarów jest źle - w tym przypadku nie będziesz mógł stosować dwóch indeksów tablicy


    Jak to nie ?

    *(tab + y*xx + x)

    gdzie xx to rozmiar jednego boku tablicy, a x i y to indeksy.
  • #10
    h-doc
    Level 27  
    krzkomar - oczywiście że można tak jak piszesz, przy czym to jest adresowanie poprzez wskaźnik a nie indeks. W przypadku, który ja opisałem możesz posługiwać się tablicą w sposób "normalny", czyli kompilator sam oblicza sobie wskaźnik:
    zamiast *(tab+y*xx+x) masz tab[x][y];
  • #11
    Xitami
    Level 29  
    h-doc? proszę, niech mi to ktoś wytłumaczy, proszę!!!!!!
  • #12
    h-doc
    Level 27  
    a co tu do rozumienia? Do tablicy jednowymiarowej odwołujesz się tak: *(tab+x) lub tab[x], a do dwuwymiarowej tak: *(tab+y*xx+x) lub tab[y][x]
  • #13
    krzkomar
    Level 25  
    Dla zrozumienia dodam tylko ze zwykla tablice tez mozesz potraktowac 2 wymiarowo: tab[y*xx+y], to tylko kwestja organizacji danych w samej tablicy jednowymiarowej. Tablica wielowymiarowa to nic innego jak tablica jednowymiarowa pocieta na kawalki o dlugosci xx.