Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 wrz 2024, o 23:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
 Tytuł: wskaźniki
PostNapisane: 19 wrz 2012, o 16:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Mała prośba o wyjaśnieni przykładu z książki:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jak rozumiem , wynikiem funkcji strtok bedzie adres do pierwszego znaku pierwszego tokena w lańcuchu. W związku z tym, czemu w warunku if i w funkcji atoi nie ma gwiazdki (*wsk) ? Tak jak wcześniej Mirek zaznaczył, *wsk wskazuje na wartość a 'wsk' na adres (w dużym uproszczeniu;) . Czyli tak jak ja to rozumiem, to nr_led = atoi(*wsk) spowoduje zamiane zmiennej ktorej adres wskazuje 'wsk' na wartosc liczbowa.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 16:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27291
Lokalizacja: Szczecin
Pomógł: 1041

if( wsk ) ....

Sprawdza po prostu czy wskaźnik nie jest pusty ? przecież łańcuch mógłby być pusty i musimy się przed tym zabezpieczyc. a tak gdy już mamy pewność że jest ok to możemy sprawdzać token

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 17:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

No tak, ja rozumiem po co jest ten warunek. Ale czemu nie jest if(*wsk) ? Tak jak ja to pojmuję, to w warunku if(wsk) będzie np. if(0x00FF) , bo wsk wskazuje na adres a nie na zmienną pod tym adresem.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 18:23 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

strtok_r zwraca wskaźnik (jakiś adres) jak znajdzie token lub NULL (nie wskazuje na nic), gdy nie znajdzie szukanego ciągu znaków.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 18:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

ciągle się nie rozumiemy ;) Ja wiem , że zwraca wskaźnik (np. adres 0x00ff). Dlatego nie rozumiem tego warunku. Przecież if(0x00FF) jest różny od zera. Podobnie atoi(wsk) da w wyniku 0x00ff , natomiast atoi(*wsk) da wyniku wartosc liczbowa zmiennej spod adresu 0x00ff. Zapewnie nie mam racji, ale chcialbym wiedziec dlaczego, zeby dobrze zrozumiec ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 18:49 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Jak w przeszukiwanym łańcuch znaków strtok_r nie znajdzie pasującego ciągu to wsk=NULL. if(NULL) <=> if(0)
Prototyp funkcji atoi wygląda następująco
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Widać, że pobierany jest wskaźnik. Do operacji na łańcuchach znaków zawsze operuje się na wskaźnikach. Nikt nie będzie przekazywał wszystkich znaków do funkcji. Nawet coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to też przekazanie wskaźnika, czyli do adresu w pamięci pierwszego znaku tego łańcucha.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 19:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27291
Lokalizacja: Szczecin
Pomógł: 1041

ixxl napisał(a):
No tak, ja rozumiem po co jest ten warunek. Ale czemu nie jest if(*wsk) ? Tak jak ja to pojmuję, to w warunku if(wsk) będzie np. if(0x00FF) , bo wsk wskazuje na adres a nie na zmienną pod tym adresem.


Tak jak pisze Krauser, ty się nie zastanawiaj jaka będzie liczba w wsk w tym przypadku bo to zupełnie nie istotne. Z punktu widzenia programisty C, ważne jest w tym warunku czy wskaźnik jest NULL czyli nie wskazuje na nic, czy też na coś wskazuje wtedy jest w nim jakaś wartość inna niż NULL

a nie może być

if( *wsk )

bo nie sprawdzamy tego co się mieści pod tym adresem tylko sprawdzamy czy w ogóle jest adres w wsk - rozumiesz ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 19:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Gdy ja analizowałem ta funkcje tez wydawało mi się to dziwne. Ale wytłumaczyłem to sobie tak, że jeśli funkcja strtok nie znajdzie żadnego łańcucha to wsk=NULL, zero. Czyli wsk będzie wskazywać na adres 0. Dlatego w warunku jest if(wsk) a nie if(*wsk).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: wskaźniki
PostNapisane: 19 wrz 2012, o 21:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Już rozumiem, dzięki za szczegółowe wyjaśnienia 8-) , dobrze że tym razem Mirek nie zaproponował mi wczasów w lochu :P

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO