eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaWskkaźniki do tablic wielorymiarowych
Ilość wypowiedzi w tym wątku: 2

  • 1. Data: 2012-07-24 14:17:16
    Temat: Wskkaźniki do tablic wielorymiarowych
    Od: slawek7 <s...@w...pl>

    Pytanie o arytmetykę wskaźników w C.
    Załóżmy że mam taka tablicę:

    char Tab [][5] =
    {
    { 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x2f, 0x00, 0x00 },
    { 0x00, 0x07, 0x00, 0x07, 0x00 },
    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },
    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },
    { 0xc4, 0xc8, 0x10, 0x26, 0x46 },
    { 0x36, 0x49, 0x55, 0x22, 0x50 } };

    robię sobie wskaźnik do niej w postaci:

    1. char *ptr1=Tab;
    2. char *ptr2=Tab[3];
    3. char *ptr3=&Tab[2][2];
    3. char *ptr4=&Tab[3];

    Punkt 3 nie działa, jest błąd. Ale dlaczego w punkcie 2 to działa i do czego jest
    wtedy wskaźnik? Czy może mi ktoś łaskawie wytłumaczyć dlaczego to działa tak a nie
    inaczej.
    Nie za bardzo moge zrozumiec tą arytmetykę wskaźników?


  • 2. Data: 2012-07-24 16:01:25
    Temat: Re: Wskkaźniki do tablic wielorymiarowych
    Od: "J.F" <j...@p...onet.pl>

    Użytkownik "slawek7" napisał w wiadomości
    >Pytanie o arytmetykę wskaźników w C.
    >Załóżmy że mam taka tablicę:
    char Tab [][5] =
    {
    { 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x2f, 0x00, 0x00 },
    { 0x00, 0x07, 0x00, 0x07, 0x00 },
    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },
    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },
    { 0xc4, 0xc8, 0x10, 0x26, 0x46 },
    { 0x36, 0x49, 0x55, 0x22, 0x50 } };

    >robię sobie wskaźnik do niej w postaci:
    1. char *ptr1=Tab;
    2. char *ptr2=Tab[3];
    3. char *ptr3=&Tab[2][2];
    3. char *ptr4=&Tab[3];

    >Punkt 3 nie działa, jest błąd. Ale dlaczego w punkcie 2 to działa i
    >do czego jest wtedy wskaźnik? Czy może mi ktoś łaskawie wytłumaczyć
    >dlaczego to działa tak a nie inaczej.
    >Nie za bardzo moge zrozumiec tą arytmetykę wskaźników?

    w czystym C arytmetyka wskaznikow jest nieco zagmatwana, ale
    konsekwentna. Pamietac musisz ze a[b] to jest *(a+b),
    tak, mozna napisac 3[Tab], i to jest to samo co Tab[3].

    p+n, jesli p jest wskaznikiem a n integerem, to jest tak naprawde
    oblicza p+n*sizeof(*p), z mozliwymi odstepstwami na maszynach o dlugim
    slowie.

    Z tablicami jest ciekawiej, ale w wyrazeniach zachowuja sie jak
    wskazniki. Tylko sizeof calosci jest inny (znaczy sie sizeof(Tab)= 35,
    jesli dobrze licze)

    Tab = tablica tablic znakowych. Czyli tez adres jej pierwszego
    elementu. Ktorym jest 5-znakowa tablica, wiec sizeof (*Tab) = 5
    w pkt.1 powinno byc ostrzezenie ze sie typ nie zgadza, bo ptr1 to
    wskaznik na pojedynczy znak. Ale do ciagle sa adresy, wiec
    podstawienie jak najbardziej dziala.

    Tab[3] = ta "podtablica". Czyli jak najbardziej adres ciagu znakow.
    typ dokladnie taki sam jak ptr2 - tez adres pojedynczego znaku - z
    mozliwoscia ciagu znakow.

    Tab[2][2] = pojedynczy znak. &Tab[2][2] jak najbardziej jest adresem
    tego znaku i bledu nie powinno byc !

    &Tab[3] ... adres 5-elementowej tablicy. znow powinienes miec
    ostrzezenie o drobnej niezgodnosci typu, identycznie jak w pkt 1.


    J.

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: