-
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.
Najnowsze wątki z tej grupy
- Mikroskop 3D
- Jak być bezpiecznym z Li-Ion?
- Szukam monitora HDMI ok. 4"
- Obcinaczki z łapaczem
- termostat do lodowki
- SEP 1 kV E
- Aku LiPo źródło dostaw - ktoś poleci ?
- starość nie radość
- Ataki hakerskie
- Akumulatorki Ni-MH AA i AAA Green Cell
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
Najnowsze wątki
- 2024-12-21 Żerniki => Specjalista ds. Employer Brandingu <=
- 2024-12-21 jak tacy debile
- 2024-12-20 Precedensy politycznie motywowanego nie wydawania w UE
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Gdańsk => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-20 czyste powietrze
- 2024-12-20 Katowice => Analyst in the Trade Development department (experience wi
- 2024-12-20 Opole => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-12-20 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-20 Rzeszów => International Freight Forwarder <=
- 2024-12-20 Katowice => Key Account Manager (ERP) <=
- 2024-12-20 Ekstradycja
- 2024-12-20 Mikroskop 3D