Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zapis do tablic wielowymiarowych w C

kokodyn 12 Mar 2017 18:26 588 9
  • #1 12 Mar 2017 18:26
    kokodyn
    Poziom 10  

    Z góry dziękuje za wszelką okazaną pomoc.
    Wychodząc z założenia że tablica dwuwymiarowa to tablica tablic, to w jaki sposób mogę przypisać tablice jednowymiarową do tablicy dwuwymiarowej. Wiem że można robić to przypisując kolejne elementy w notacji tablicowej tab[i][j] itd. Ale tym razem potrzebuje zapisać całą tablice nowa[ROZMIAR] pod pod i=miejsce w tablicy tab[i][j]
    Zamieszczony poniżej kod oczywiście się nie kompiluje, cz mógłby ktoś proszę przybliżyć mi mechanizm działania zapisu to tablic wielowymiarowych?
    Przykładowo chciałbym to robić w funkcji:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 9
  • #2 12 Mar 2017 19:04
    Dżyszla
    Poziom 42  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod
    W ten sposób masz tablicę m x n; Jeśli chcesz dynamiczne tablice, to musisz je tworzyć.

    Czyli - tablica jest wskaźnikiem wskaźników na int. Tworzysz teraz to niej tablicę wskaźników na int m-elementową, a do każdego elementu tej tablicy tablicę n-elementową. Co jest wierszem a co kolumną to tylko kwestia interpretacji.

    0
  • Pomocny post
    #3 12 Mar 2017 19:47
    hello_world
    Poziom 10  

    Alokacja pamięci, jeżeli chodzi o Twój opis to takie coś:

    Kod: objc
    Zaloguj się, aby zobaczyć kod

    Jeżeli chcesz swoim sposobem to tak:
    Kod: objc
    Zaloguj się, aby zobaczyć kod


    Gdyby kogoś bolała moja składnia. Jeżeli ktoś się uczy to niech uczy się łopatologicznie. Owszem, można pójść jeszcze bardziej na skróty.

    0
  • #4 13 Mar 2017 13:49
    kokodyn
    Poziom 10  

    Dlaczego w tym miejscu zapotrzebowanie na pamięć jest obliczane w ten sposób:
    Dlaczego jest sizeof(int *)?"

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #5 13 Mar 2017 15:56
    rajszym
    Poziom 19  

    Czy na pewno potrzebna jest ci dynamiczna alokacja pamięci?
    Rozważ poniższy przykład:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #6 13 Mar 2017 16:16
    hello_world
    Poziom 10  

    Mam nadzieję, że rozumiesz wskaźniki.

    a jest int-em, więc ma wielkość int
    p_a jest wskaźnikiem na int, więc alokujemy pamięć dla tablicy int-ów
    pp_a jest wskaźnikiem na wskaźnik na int, więc alokujemy pamięć dla tablicy wskaźników na int

    adres
    (&zmienna)
    zawartość
    (zmienna)
    wyłuskanie 1
    poziomu
    (*zmienna)
    wyłuskanie 2
    poziomu
    (**zmienna)
    a=50x0005brakbrak
    *p_a = &a0x0010x0005brak
    **pp_a = &p_a0x0020x0010x0005

    Zależnie od architektury wskaźnik ma 32b (4B) lub 64b (8B)

    Dodano po 3 [minuty]:

    rajszym napisał:
    Czy na pewno potrzebna jest ci dynamiczna alokacja pamięci?
    Rozważ poniższy przykład:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Nie zaleca się korzystania z globalnych zmiennych, bo można przez omyłkę stracić dane

    1
  • #7 14 Mar 2017 07:38
    rajszym
    Poziom 19  

    hello_world napisał:
    Nie zaleca się korzystania z globalnych zmiennych, bo można przez omyłkę stracić dane

    Przede wszystkim nie zaleca się korzystania z konstrukcji, których się nie rozumie!

    0
  • #8 15 Mar 2017 21:41
    kokodyn
    Poziom 10  

    Jeszcze tylko jedno pytanie:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Czyli mamy tablice tablic.
    Jako że nazwa tablicy to adres jej pierwszego elementu, wiedząc że tablica[0] = &tablica[0][0] to czy np. tablica[0] jest traktowana jako nazwa tablicy, tak?

    0
  • #9 16 Mar 2017 23:52
    tzok
    Moderator Samochody

    ...i tak i nie. W przypadku tablicy jednowymiarowej adres tablicy jest wskaźnikiem jej pierwszego elementu, czyli jeśli jest to tablica int, to jest to wskaźnik na int. W przypadku tablicy dwuwymiarowej, czyli tablicy tablic, też jest to wskaźnik jej pierwszego elementu, tyle że tym razem pierwszym elementem jest... tablica, a nie wartość. Czyli jest to wskaźnik do wskaźnika do wartości.

    0
  • #10 17 Mar 2017 12:00
    rajszym
    Poziom 19  

    kokodyn napisał:
    czy np. tablica[0] jest traktowana jako nazwa tablicy, tak?

    Nazwa tablicy istnieje tylko w pliku źródłowym.
    tablica[0] jest traktowana jako wskaźnik do wektora (tablicy jednowymiarowej), tak jak napisał to kolega @tzok.

    0