eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaWskkaźniki do tablic wielorymiarowychRe: Wskkaźniki do tablic wielorymiarowych
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: "J.F" <j...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Wskkaźniki do tablic wielorymiarowych
    Date: Tue, 24 Jul 2012 16:01:25 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 55
    Message-ID: <jum9rq$lmg$1@inews.gazeta.pl>
    References: <e...@g...com>
    NNTP-Posting-Host: afnx29.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1343138490 22224 178.42.101.29 (24 Jul 2012 14:01:30 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 24 Jul 2012 14:01:30 +0000 (UTC)
    Importance: Normal
    In-Reply-To: <e...@g...com>
    X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308
    X-Priority: 3
    X-Newsreader: Microsoft Windows Live Mail 15.4.3555.308
    X-User: jjll
    X-MSMail-Priority: Normal
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:634317
    [ ukryj nagłówki ]

    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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

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: