-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Konop <k...@g...pl>
Newsgroups: pl.misc.elektronika
Subject: Re: Wskaźniki i ich rzutowanie (Język C)
Date: Mon, 27 Jun 2011 17:53:35 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 68
Message-ID: <iua920$7mb$1@inews.gazeta.pl>
References: <b...@c...googlegroups.com>
NNTP-Posting-Host: hmk227.internetdsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: inews.gazeta.pl 1309190016 7883 79.188.62.227 (27 Jun 2011 15:53:36 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Mon, 27 Jun 2011 15:53:36 +0000 (UTC)
X-User: konoppo
X-Antivirus: avast! (VPS 110627-0, 2011-06-27), Outbound message
In-Reply-To: <b...@c...googlegroups.com>
X-Antivirus-Status: Clean
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.18) Gecko/20110616
Thunderbird/3.1.11
Xref: news-archive.icm.edu.pl pl.misc.elektronika:612586
[ ukryj nagłówki ]W dniu 2011-06-27 07:44, slawek7 pisze:
> Cześć.
> Chciałbym Was prosić o pomoc w zrozumieniu wskaźników i ich
> rzutowania.
> Niby proste, ale jakoś tego nie rozumiem. Jak rozumieć takie zapisy i
> dlaczego tak jest to pisane:
Wskaźnik to jest po prostu zmienna (albo stała ;)), która zawiera ADRES
jakiejś zmiennej/stałej w pamięci. W sumie adres zmiennej int niczym nie
różni się od adresu zmiennej char, ALE - zaraz to wyjaśnię ;)..
> 1. int *p=(int *)&w;
Deklarujesz zmienną p, której typ to "wskaźnik na int". Teraz
przypisujesz jej wartość równą adresowi zmiennej w (ten & oznacza, że
brany pod uwagę jest adres elementu za nim). No i pytanie, jakiego typu
jest adres w (&w)? Może to być:
wksaźnik na char (char *)
wskaźnik na int (int *)
i wiele wiele innych - ogólnie to nie wiadomo... dlatego robi się
normalne rzutowanie, gdzie typem docelowym jest "wskaźnik na int" (int
*) czyli typ taki, jaki ma zmienna p.
I teraz małe wtrącenie - czym się różni adres zmiennej int od zmiennej
np. char? NICZYM!! Ale język C dopuszcza zapisy takie jak na przykład
*(p + 1). W tym kontekscie będzie to wskaźnik na następego inta w
pamięci!!! Czyli, w przypadku AVRów, gdzie int ma 16 bitów, jeśli
zmienna w jest pod adresem powiedzmy 0x100, to
p = 0x100
(p + 1) = 0x102!!!!
Gdyby p miało typ char *, to byłoby to 0x100 i 0x101... rozumiesz??
> 2.
> unsigned int nCols;
> unsigned int nRows;
> unsigned char *pFont;
> unsigned char *pChar;
> unsigned char *FontTable[] = {(unsigned char *)FONT6x8,
> (unsigned char *)FONT8x8,
> (unsigned char *)FONT8x16};
> i teraz
> pFont = (unsigned char *)FontTable[1]; // skoro FontTable[] jest typu
> unsigned char to po co jeszcze rzutować?
Nie jest typu unsigned char, tylko typu "wskaźnik na unsigned char",
moim zdaniem rzutowanie nie jest potrzebne, co nie znaczy, że nie wolno
go stosować!!! Może z pewnych względów komuś lepiej było tak zapisać?
Albo ktoś uważał, że taki kod jest o wiele czytelniejszy??
> nCols = pgm_read_byte(&*pFont);
> nRows = pgm_read_byte(&*(pFont + 1)); // tych zapisów nie rozumiem
> & oraz *
Adres elementu wskazywanego przez pFont oraz adres elementu
następnego... Moim zdaniem możesz usunąć &* i nic się nie zmieni ;)...
Nie potrafię Ci powiedzieć DLACZEGO ktoś zastosował taki zapis,
natomiast nie jest on błędny! Jest jednoznaczny, może tylko
niepotrzebnie zagmatwany... .
> FontTable deklarowane są jako: unsigned char FONT8x16[] PROGMEM =
> {.... itd
>
> Oczywiście jest to napisane dla AVR i kompilowane w AVR-GCC
--
Pozdrawiam
Konop
Następne wpisy z tego wątku
- 27.06.11 17:07 Michoo
- 27.06.11 20:30 Waldemar Krzok
- 30.06.11 10:19 slawek7
- 30.06.11 12:57 qlphon
- 30.06.11 17:15 identifikator: 20040501
- 30.06.11 17:33 Michoo
- 01.07.11 02:18 Lelek@
- 01.07.11 16:43 slawek7
- 01.07.11 17:39 slawek7
- 05.07.11 07:47 Artur M. Piwko
Najnowsze wątki z tej grupy
- Czy cos fi przechodzi przez trafo separujące?
- śrubka masy
- Ciekawostka na dziś lock bity
- [OT] napisy w YT
- Było 83V
- Stare komputery
- Odbiornik ADS-B i wzmacniacze
- Thunderbird i dysk...
- opornosc falowa
- Bateria 9V 6F22, alkaliczna v cynkowa, samorozładowanie, bateria wysokiej trwałości do miernika
- Tani zakup z ali?
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
Najnowsze wątki
- 2025-08-06 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-08-06 Białystok => Inżynier oprogramowania .Net <=
- 2025-08-06 "[...] sejmowe wystąpienie posłanki Klaudii Jachiry, która zakończyła je słowami ,,Sława Ukrainie"."
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Panuje się 181 159,42 zł./mies. na posła w 2026r.
- 2025-08-05 "Chiny przekraczają w wydobyciu 4 mld ton węgla, Indie i USA ponad 1 mld, a Rosja 500 mln ton [...]"
- 2025-08-05 Czy cos fi przechodzi przez trafo separujące?
- 2025-08-05 kajaki i promile
- 2025-08-05 Re: Tesla jest bezpieczna, wczoraj spaliła się doszczętnie na Ursynowie i nikomu się nic nie stało
- 2025-08-05 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-08-05 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-05 B2B i książka przychodów i rozchodów
- 2025-08-04 Re: Atak na lekarza w Oławie. Policja zatrzymała sprawcę na lotnisku Polska Agencja Prasowa 4 sierpnia 2025, 12:16 FACEBOOK X E-MAIL KOPIUJ LINK W szpitalu w Oławie 37-letni pacjent zaatakował lekarza, po tym, jak ten odmówił mu wypisania długoterminowego
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- 2025-08-04 Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML