Wskaźniki i ich rzutowanie (Język C)

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
CzeB6%E6.
ChciaB3%bym Was prosiE6% o pomoc w zrozumieniu wskaBC%nikF3%w i ich
rzutowania.
Niby proste, ale jakoB6% tego nie rozumiem. Jak rozumieE6% takie zapisy i
dlaczego tak jest to pisane:

1. int *p3D%(int *)&w;
2.
  unsigned int  nCols;
  unsigned int  nRows;
  unsigned char *pFont;
  unsigned char *pChar;
  unsigned char *FontTable[] 3D% {(unsigned char *)FONT6x8,
                                (unsigned char *)FONT8x8,
                                (unsigned char *)FONT8x16};
i teraz
pFont 3D% (unsigned char *)FontTable[1];  // skoro FontTable[] jest typu
unsigned char to po co jeszcze rzutowaE6%?
nCols  3D% pgm_read_byte(&*pFont);
nRows  3D% pgm_read_byte(&*(pFont + 1));    // tych zapisF3%w nie rozumiem
& oraz *

FontTable deklarowane sB1% jako: unsigned char FONT8x16[] PROGMEM 3D%
{.... itd

OczywiB6%cie jest to napisane dla AVR i kompilowane w AVR-GCC

Re: Wskaźniki i ich rzutowanie (Jęz yk C)
Am 27.06.2011 07:44, schrieb slawek7:
Quoted text here. Click to load it
a co w tym takiego dziwnego?

Quoted text here. Click to load it
nie jest

no to skasuj &*

Quoted text here. Click to load it

1. NTG
2. Kernighan, Ritchie "Język C"

Waldek

--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Re: Wskaźniki i ich rzutowanie (Język C)


Quoted text here. Click to load it

Ty się ciesz, że ktoś pyta o coś takiego zamiast o to jaki telewizor kupić
wszak telewizor to też elektronika :-)


Re: Wskaźniki i ich rzutowanie (Język C)


Quoted text here. Click to load it

w: .byte 256

ldi XH,high(w)
ldi XL,low(w)

Co siedzi w X ? W X siedzi adres początku bufora "w" czyli siedzi tam &w
adres początku "w".
Jest to liczba w tym X jaka? 2 bajtowa 16 bitowa bo siedzi w XL i XH.
Jest to wskaźnik do tego bufora czyli jego adres początkowy.

Teraz jeżeli X i p są tego samego size-u to wystarczy: (int 16 bit)
int *p = &w

ale jeśli różnego np long 32 bity
unsigned long *p = (unsigned long *)&w



Re: Wskaźniki i ich rzutowanie (Jęz yk C)
Am 27.06.2011 16:20, schrieb Lelek@:
Quoted text here. Click to load it

W ogólności nie. Niektóre kompilatory na to nie pozwalają, nawet jak
typy mają tą samą wielkość. Jak masz ustawienia typu "paranoic" to nawet
coś takiego nie przejdzie:

typedef unsigned char byte;
unsigned char C, *pC;
byte B, *pB;
C = 0x55;
pC = &C;
pB = pC; // wywala błąd
pB = (byte) pC; // jest ok


Waldek



--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Re: Wskaźniki i ich rzutowanie (Jęz yk C)
W dniu 27.06.2011 16:41, Waldemar Krzok pisze:
Quoted text here. Click to load it
Nie miałeś przypadkiem na myśli
pB = (byte*) pC;
?
Bo jak kompilator krzyczy na konwersję uchar* -> byte* to na 99% będzie
krzyczał na konwersję byte -> uchar*

--
Pozdrawiam
Michoo

Re: Wskaźniki i ich rzutowanie (Język C)

Quoted text here. Click to load it

Dokładnie. (byte *) ma być

Waldek

--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Re: Wskaźniki i ich rzutowanie (Język C)
DziEA%kujEA% za wrozumiaB3%oB6%c i odpowiedz.
SwojB1% drogB1% zastanawiam sie gdzie tu moBF%na siEA% o coB6% spytaE6%, ta=
k aby
dostac odpowiedz a nie ochrzan BF%e siEA% pyta.



Re: Wskaźniki i ich rzutowanie (Język C) [PS]
Quoted text here. Click to load it

nie bądź naiwny, nawet żona czasami opie..czy jak ją "tylko" o coś zapytasz
;-)
nie ma już takich miejsc, gdzie jest zawsze miło i przyjemnie...
trzeba po prosu troszkę sobie skórkę pogrubić...

mimo paru najazdów dostałeś ostatecznie kilka bardzo ciekawych odpowiedzi
i chyba o to chodziło, prawda?
[dawno już nic nie pisałem w C, więc z przyjemnością sobie odświeżyłem
pamięć]

na tego typu grupach znajduje się wielu poczciwych grupowiczów, wielu
dziwaków (czasami to te same osoby)
i zawsze parę oszołomów (mówię ogólnie - nie piję do nikogo konkretnie!)
naucz sie z tym żyć i wyławiać treść pośród zgiełku (TG: odfiltrowywać szumy
z sygnału ;-)
a będziesz z usenetu miał pożytek ...

q


Re: Wskaźniki i ich rzutowanie (Język C)
Dziękuję za wrozumiałośc i odpowiedz.
Swoją drogą zastanawiam sie gdzie tu można się o coś spytać, tak aby
dostac odpowiedz a nie ochrzan że się pyta.

no na elektrodzie


Re: Wskaźniki i ich rzutowanie (Jęz yk C)
W dniu 30.06.2011 19:15, identifikator: 20040501 pisze:
Quoted text here. Click to load it
Tylko widzisz, tu dostajesz I ochrzan (bo pytania są często na poziomie
dna - świadczą albo o skrajnych brakach albo skrajnym lenistwie) I
odpowiedzi (bo ludzie jednak Cię pożałują).

Na elektrodzie dostaniesz zjebkę od admina i temat trafi do kosza.

--
Pozdrawiam
Michoo

Re: Wskaźniki i ich rzutowanie (Język C)
I dostaB3%em.
Na elektrodzie zapytaB3%em o tryb 8 bitowy w LCD od Nokii 6100. temat
trafiB3% do kosza a od madrego admina dostaB3%em odpowiedz typu ze temat
byB3% poruszany i tam zostaB3%o wyjsnione. Gdyby ten pseudo fachowiec
(moderator) z elektrody zadaB3% sobie odrobine trudu i przeczytaB3% to do
czego link pusciB3% to sam sie powinien do kosza posB3%aE6%. Dla ciekawoB6%
ci
powiem ze odpowiedziB1% na moje pytanie byB3% link do innego pytania, na
ktF3%re nie byB3%o odpowiedzi, ale ten fajchmajster stwierdziB3% ze to jest
na tyle wyczerpujB1%ce ze grzesze pytajB1%.

Re: Wskaźniki i ich rzutowanie (Język C)
I dostaB3%em.
Na elektrodzie zapytaB3%em o tryb 8 bitowy w LCD od Nokii 6100. temat
trafiB3% do kosza a od madrego admina dostaB3%em odpowiedz typu ze temat
byB3% poruszany i tam zostaB3%o wyjsnione. Gdyby ten pseudo fachowiec
(moderator) z elektrody zadaB3% sobie odrobine trudu i przeczytaB3% to do
czego link pusciB3% to sam sie powinien do kosza posB3%aE6%. Dla ciekawoB6%
ci
powiem ze odpowiedziB1% na moje pytanie byB3% link do innego pytania, na
ktF3%re nie byB3%o odpowiedzi, ale ten fajchmajster stwierdziB3% ze to jest
na tyle wyczerpujB1%ce ze grzesze pytajB1%.

Re: Wskaźniki i ich rzutowanie (Język C)
In the darkest hour on Thu, 30 Jun 2011 19:15:25 +0200,
Quoted text here. Click to load it

Jeśli o podstawy to w zasadzie wszędzie się dostanie.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:234B ]
[ 09:46:52 user up 12854 days, 21:41,  1 user, load average: 0.13, 0.71, 0.45 ]

We've slightly trimmed the long signature. Click to see the full one.
Re: Wskaźniki i ich rzutowanie (Język C)


Quoted text here. Click to load it

Trzeba ćwiczyć. Gdybys pisał w assemblerze to byś wskaźniki rozumiał :-)


Re: Wskaźniki i ich rzutowanie (Jęz yk C)
W dniu 2011-06-27 07:44, slawek7 pisze:
Quoted text here. Click to load it

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ę ;)..

Quoted text here. Click to load it

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??

Quoted text here. Click to load it

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??

Quoted text here. Click to load it

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... .

Quoted text here. Click to load it


--
  Pozdrawiam
  Konop

Site Timeline