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



Teraz jest 28 mar 2024, o 21:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
Autor Wiadomość
PostNapisane: 17 maja 2020, o 19:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Witam.

Mam pytanie odnośnie zrozumienia wskażników?
Pytanie dotyczy zrozumienia deklaracji zmiennej wskażnikowej np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

rozumiem że wsk jest to zmienna wskaznikowa typu char i będzie wskazywała w przyszłości na jakieś komórki pamięci czy tak?

ale np. pojawia się w pewnym fragmencie kodu zapis:

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


To jak ja mam rozumieć tą gwiazdkę kiedy wiem czy jest do działanie w zakresie określenia deklaracji a jak mam rozumieć kiedy gwiazdka określa działanie sprawdzające np weż sprawdż
jaka jest wartość komórki tzn. czy w/w zapis to deklaracja czy sprawdzenie czy wpisanie w komórkę pamięci o wartości określającej przez wsk wartość buf....



Ostatnio edytowano 17 maja 2020, o 19:22 przez AKSELINEK, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 19:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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

przypisujesz wartość zmiennej buf.
Jak się mylę, to niech mnie ktoś poprawi.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 19:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

No tak ale można robić deklaracje zmiennej i od razu zapisywać w komórkę pamięci określoną przez wsk wartość buf, to znaczy że wartość buf zostanie zapisana na komórkę pamięci o wartości 0???

Proszę mi rozpisać dla w/w przypadku jaki jest adres komórki i jaka jej wartość?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 19:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

Zajrzyj do tego wątku, to może ci to coś rozświetli

topic22851.html

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 19:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

No ok przypisuję wartość zmiennej buf na wartość komórki określającej przez wsk no dobra ok wartość komórki to buf ale jaki jest adres czy 0?

no to może jak to jest w przykładzie?

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



Ostatnio edytowano 17 maja 2020, o 20:02 przez AKSELINEK, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 19:59 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

mario2015 napisał(a):
Po prostu do zmiennej wskaźnikowej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

przypisujesz wartość zmiennej buf.
Jak się mylę, to niech mnie ktoś poprawi.


Niestety mylisz się.
Przypisuje adres buf.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

to co dokładnie dzieje się się w tej linijce?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:07 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

do wsk przypisany jest adres na pierwszą daną tablicy buf.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

A kto powiedział, że zmienna buf to tablica?

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

A no to mi trochę rozjaśniłeś to do wsk przypisany jest adres z pierwszego elementu tablicy buf ale myli mnie ta * to co ona oznacza czy to jest deklaracja że pojawia się taka zmienna?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:21 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

mario2015 napisał(a):
A kto powiedział, że zmienna buf to tablica?

Dobry styl programowania

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

No ja rozumiem dobry styl ok. Ale nie rozumiem kiedy * określa deklarację czyli że będzie taka zmienna a kiedy jest wykonywanie działanie na * ? i jak jest w tym przypadku?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:24 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

W tym przypadku masz deklaracje z inicjalizacją w jednym...

------------------------ [ Dodano po: 1 minucie ]

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

No to tutaj jest dokładnie tak samo.

------------------------ [ Dodano po: 2 minutach ]

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

Czy to Ci coś rozjaśnia? I czy widzisz różnicę?

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

A to tak można? to czego nie oznaczyli * inaczej dla deklaracji a inaczej dla inicjalizacji bo to mnie wprowadza w błąd......
Poprostu myli mnie * bo ona raz oznacza deklaracje zmiennej dla określania w przyszłości komórek pamięci a za chwile * robi jakieś tam działenie ...
I dlatego mnie to zamieszało ...

Czyli można zapisać tak:

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


Dobrze zrozumiałem tę lekcję czy dalej bujam się w tej * bez zrozumienia tematu?



Ostatnio edytowano 17 maja 2020, o 20:35 przez AKSELINEK, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:34 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

To nie jest takie trudne.
Tam gdzie przed * masz typ to masz deklarację.
Sama * nie oznacza deklaracji. Oznacza tylko że zadeklarowana zmienna to wskaźnik.



Ostatnio edytowano 17 maja 2020, o 20:37 przez auers, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:37 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

AKSELINEK napisał(a):
A to tak można? to czego nie oznaczyli * inaczej dla deklaracji a inaczej dla inicjalizacji bo to mnie wprowadza w błąd......
Poprostu myli mnie * bo ona raz oznacza deklaracje zmiennej dla określania w przyszłości komórek pamięci a za chwile * robi jakieś tam działenie ...

Nie robi jakiegoś tam działania. Tylko mówi: "weź wartość z komórki na którą wskazuję i zrób z nią to co trzeba" ;-)
Albo... "udaj się pod adres wpisany do wsk i tam już działaj..."

A zmienną możesz albo tylko zadeklarować albo zadeklarować i zainicjować.
Po czym poznać co jest co?
Jak na początku przed nazwą zmiennej masz jej typ to znaczy że to deklaracja. A jak wystąpi jeszcze znak = i coś po prawej stronie to znaczy że od razu tą zmienną inicjujesz tym co jest po prawej stronie znaku równości.

------------------------ [ Dodano po: 2 minutach ]

AKSELINEK napisał(a):
Czyli można zapisać tak:

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


Dobrze zrozumiałem tę lekcję czy dalej bujam się w tej * bez zrozumienia tematu?

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

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:43 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

MirkoT napisał(a):
Jak na początku przed nazwą zmiennej masz jej typ to znaczy że to deklaracja. A jak wystąpi jeszcze znak = i coś po prawej stronie to znaczy że od razu tą zmienną inicjujesz tym co jest po prawej stronie znaku równości.

Czyli:
- deklaracja mówi kompilatorowi co to za zmienna, jakiego typu.
- inicjalizacja przypisuje zmiennej wartość początkową.
Ot cała tajemnica deklaracji i inicjalizacji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 20:45 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

auers napisał(a):
MirkoT napisał(a):
Jak na początku przed nazwą zmiennej masz jej typ to znaczy że to deklaracja. A jak wystąpi jeszcze znak = i coś po prawej stronie to znaczy że od razu tą zmienną inicjujesz tym co jest po prawej stronie znaku równości.

Czyli:
- deklaracja mówi kompilatorowi co to za zmienna, jakiego typu.
- inicjalizacja przypisuje zmiennej wartość początkową.
Ot cała tajemnica deklaracji i inicjalizacji.

Tak jest! I jeszcze można je połączyć w jedno. ;-)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

No dobrze ale parę linijek dalej pojawia się zapis:

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

i ta kochana * jest też przed zmienną ale to nie jest delaracja ???? tylko działanie czy tak??



Ostatnio edytowano 17 maja 2020, o 21:05 przez AKSELINEK, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:04 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

No i Twoim zdaniem co to oznacza?

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Moim zdaniem * oznacza działanie zwiększ o 1 buf i zapisz tam wartość zmiennej c....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:09 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Prawie dobrze ;-)

------------------------ [ Dodano po: 2 minutach ]

Ta gwiazdka oznacza udaj się pod adres jaki pokazuje wskaźnik i wpisz to co jest po prawej stronie znaku równości, czyli w tym przypadku jakiś znak. A następnie zwiększ wartość wskaźnika o jeden (ale to robią te dwa ++)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

No dzięki za cenne wskazówki muszę się przespać z tym problemem ale może jestem o krok od zrozumienia ;)
Przemyśle to i jeszcze coś dopytam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:19 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Tego Ci życzę :-)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2020, o 21:32 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

AKSELINEK napisał(a):
Moim zdaniem * oznacza działanie zwiększ o 1 buf i zapisz tam wartość zmiennej c....

Tak dla ścisłości, tu nie chodzi o zwiększanie buf. Tylko zwiększenie adresu o 1, czyli wskazanie na kolejny element w tablicy buf.
A kolejność działań jak już wskazał MirkoT, odwrotna.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2020, o 19:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Bardzo dziękuję za cenną lekcję i na pewno lepiej zrozumiałem temat.
Z lekcji wyciągnąłem wnioski błąd mojego myślenia polegał na tym że do zmiennej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zostaje wpisywany adres komórki a nie wartość.
I druga bardzo ważna sprawa jak podpowiedział kolega auers - jeśli przed zmienną jest typ to to odróżnia deklaracje a w inicjalizacji to jest już zapis *wsk i to ważny moment dla zrozumienia istoty tematu. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2020, o 20:20 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

W inicjalizacji jest wsk
jeżeli użyjesz *wsk to nie zainicjalizujesz wskaźnika ale wpiszesz wartość w komórkę na którą ten wskaźnik pokazuje...

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2020, o 20:41 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

MirkoT napisał(a):
W inicjalizacji jest wsk
jeżeli użyjesz *wsk to nie zainicjalizujesz wskaźnika ale wpiszesz wartość w komórkę na którą ten wskaźnik pokazuje...

Chyba że inicjacja jest razem z deklaracją, a chyba do tego odnosi się Akselinek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2020, o 20:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Tak tak rozumiem to tylko na początku zmylił mnie całkowicie zapis zapis :

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


i była to deklaracja i tu *wsk ma inne znaczenie niż póżniej *wsk i tu dopiero zrozumiałem że te dwa znaczenia się różnią.



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: 29 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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