<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=994&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-06-25T22:58:05+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=994&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-06-25T22:58:05+01:00</updated>
<published>2012-06-25T22:58:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8553#p8553</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8553#p8553"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8553#p8553"><![CDATA[
Nie nie nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> teraz zamieszałeś troszkę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />tzn to masz dobrze:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TPOLE_INFO *PObj2;</div><br /><br />czyli to jest wskaźnik ale nie do struktury - tylko wskaźnik TYPU TPOLE_INFO a to chyba różnica prawda ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />dopiero po takiej operacji:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PObj2 = &amp;Obj1;</div><br /><br />można byłoby powiedzieć, że PObj2 jest wskaźnikiem do struktury Obj1 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />i oczywiście coś takiego nie miałoby sensu:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PObj2 = &amp;Obj1.pole1;</div><br /><br />ponieważ do wskaźnika typu TPOLE_INFO chciałbyś przypisać adres (wskaźnik) jednej zmiennej z tej struktury i to typu int <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc sam widzisz, że to nie miałoby sensu.<br /><br />A jeśli chcesz pobrać dane do zmiennej to nie tak:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br /><span style="color: #FF0000">jakas_zmienna = *PObj2;</span><br /></div><br /><br />tylko np tak:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br /><span style="color: #008000"><strong>int jakas_zmienna = *PObj2-&gt;pole1;</strong></span><br /></div><br /><br />wtedy jakas_zmienna przyjmie wartość pole1 struktury Obj1, ponieważ posługujesz się wskaźnikiem PObj2 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> do którego wcześniej przypisaliśmy adres tejże struktury. Zauważ, że jeśli działasz na wskaźniku to do pól struktury odwołujesz się nie po kropce a po takim czymś <br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #0040FF">-&gt;</span></span></strong><br /><br />a gdybyś chciał to samo zrobić bezpośrednio ze struktury Obj1 to wtedy z kropką:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">int jakas_zmienna = Obj1.pole1;</div><br /><br />I w przypadku wskaźników na struktury zapomnij o PObj2++ bo to nie są tablice, a skoro PObj2 jest wskaźnikiem na strukturę to po tej operacji wskazywałby na kolejny bajt w pamięci RAM gdzie kończy się ta właśnie struktura <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czyli w ciemność <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> No chyba żebyś zdefiniował tablicę struktur np tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TPOLE_INFO Obj3&#91;4&#93;;<br />TPOLE_INFO *wsk = Obj3;</div><br /><br />wtedy oczywiście mógłbyś zrobić wsk++ i po tej operacji wskazywałby on na kolejny element tablicy Obj3, w której każdy jej element jest typu TPOLE_INFO.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 cze 2012, o 22:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartool]]></name></author>
<updated>2012-06-25T22:08:22+01:00</updated>
<published>2012-06-25T22:08:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8552#p8552</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8552#p8552"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8552#p8552"><![CDATA[
Nawet nie wiesz jak bardzo <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Sam się nie mogę nadziwić, jak sposób zapisu może utrudznić/ułatwić zrozumienie kodu.<br /><br />Ta żeby było wszystko jasne i czy napewno to dobrze zrozumiałem.<br />To jest wskaźnik do struktury:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TPOLE_INFO *PObj2;</div><br />I teraz, pobieram adres zmiennej w strukturze tak:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PObj2 = &amp;Obj1.pole1;</div><br />Korzystając ze wskaznika, pobieram dane do zmiennej:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">jakas_zmienna = *PObj2;</div><br />Jeżeli zwieksze zawartość wskaźnika o jeden:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PObj2++;</div><br />To wskaźnik będzie wskazywał na drugą zmienną w strukturze? A przy kolejnym zwiekszeniu, na kolejną zmienną, pomimo, że są różnego typu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=402">bartool</a> — 25 cze 2012, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-06-25T20:37:35+01:00</updated>
<published>2012-06-25T20:37:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8546#p8546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8546#p8546"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8546#p8546"><![CDATA[
Ja tam wolę porządek dlatego nigdy bym nie użył takiego zapisu jak pokazałeś tylko zrobił to tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">typedef struct {<br />  int pole1;<br />  float pole2;<br />  char pole3&#91;20&#93;;<br />} TPOLE_INFO;</div><br /><br />a potem ładnie:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TPOLE_INFO Obj1;<br />TPOLE_INFO *PObj2;</div><br /><br />i co ? teraz widać wyraźniej i lepiej dla oka co tu robię ? poza tym jeśli jedna struktura ma służyć do tworzenia różnych obiektów to po jakiego grzyba tworzyć to w kodzie jako zmienne globalne razem z definicją struktury, to się nazwya &quot;misz-masz&quot;. Ale jak widać po przykładzie, który podałem wyżej o wiele przyjaźniej dla oka i dla całego programu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a od razu widać że powołuję strukturę o nazwie Obj1 typu TPOLE_INFO oraz wskaźnik do struktury *PObj2 o takim samym typie - jaśniej teraz ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 cze 2012, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartool]]></name></author>
<updated>2012-06-25T20:24:35+01:00</updated>
<published>2012-06-25T20:24:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8544#p8544</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8544#p8544"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8544#p8544"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />No już tu się gubisz Pan  ..... Bo skąd ci to przyszło do głowy? A poza tym jak zadajesz takie pytania nawet sam sobie - to zawsze weź Eclipse w łapki i dawaj!.... wprowadź taką definicję funkcji do której przekazujesz wskaźnik a potem spróbuj tak przekazać argument i skompiluj - popatrz co się stanie, jakie posypią się warningi itp - a nie tylko tak na sucho rozpatrujesz <br /><br />Jak można do funkcji fun( char * s ) przekazać<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">int zmienna;<br />fun(zmienna);</div><br />toż to niestety totalne nieporozumienie - nawet jakbyś chciał tak:<br /></div><br />Już wyjaśniam. Skoro każdy wskaźnik zajmuje dwa bajty w pamięci, to wywnioskowałem, że jeżeli będe miał adres w zmiennej dwubajtowej, to wyjdzie jak bym użył operatora pobierania adresu. Przyznaje, że była to mała prowokacja <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> , bo sprawdziłem czy zadziała takie wyrażenie w eclipse wcześniej. Zdziwiłem się, jak otrzymałem ostrzeżenia od kompilatora. Dlatego umieściłem takie ptaniue tutaj. Natomiast jak przeczytałem:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Dobrze ci się wydaje ale zobacz jakie są ważne szczegóły - nie dokończyłeś tej definicji a to pokazuje że nie zaskoczyłeś co to są albo po co w ogóle deklaruje się TYPY wskaźników.<br /></div><br />to poczułem jak bym dostał impuls na reset i wyskoczył z nieskończonej pętli <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> No Ba! Przecież ważny jest typ danej na która wskaźnik wskazuje, aby odpowiednio dobrać adres. Dziękuje, to mi bardzo pomogło.<br /><br />Tutaj popełniłem błąd przy pisaniu:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">tablica_adres&#91;2&#93; = @jakas_zmienna;</div><br />Miało być tak:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">tablica_adres&#91;2&#93; = &amp;jakas_zmienna;</div><br />pozostałości z asemblera 8051...<br /><br />No dobra, skoro tak pięknie Mirku naprowadziłeś na dobro drogę, mam kolejne pytanie.<br />Wspomniałem wcześniej, że moje oczy zrobiły się wielkie jak 5zl, jak zobaczyłem połączenie struktury ze wskaźnikami. Np.taką składnie:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">struct nazwa<br />{<br />   int pole1;<br />   float pole2;<br />   char pole3&#91;20&#93;;<br />} Obj1, *PObj2;</div><br />W rozdziale na temat struktur jest pięknie opisane jak dostać się do każdej zmiennej w strukturze za pomocą kropki. Rozumiem, że przecinek za &quot;Obj1&quot; oznacza drugi egzemplarz takiej struktury (prawda?). Czy jest to samo jakbym użył instrukcji typedef, a następnie utworzył dwa egzemplarze takiej struktury? Natomiast w tym miejscu ta gwiazdka mnie przeraża, nawet nie wiem jak probować to odczytać. Nie daje mi też spokoju ta &quot;nazwa&quot; za definicją struktury.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=402">bartool</a> — 25 cze 2012, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-06-25T18:50:20+01:00</updated>
<published>2012-06-25T18:50:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8529#p8529</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8529#p8529"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8529#p8529"><![CDATA[
<div class="quotetitle">bartool napisał(a):</div><div class="quotecontent"><br />Równie dobrze można przekazać zmienną do tej funkcji, ale trzeba zadbać, aby ta zmienna była dwu bajtowa, prawda?<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent">int zmienna;<br />funkcja(zmienna);<br /></div></div><br /><br />No już tu się gubisz Pan <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... Bo skąd ci to przyszło do głowy? A poza tym jak zadajesz takie pytania nawet sam sobie - to zawsze weź Eclipse w łapki i dawaj!.... wprowadź taką definicję funkcji do której przekazujesz wskaźnik a potem spróbuj tak przekazać argument i skompiluj - popatrz co się stanie, jakie posypią się warningi itp - a nie tylko tak na sucho rozpatrujesz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Jak można do funkcji <strong><span style="color: #0040FF">fun( char * s )</span></strong> przekazać <br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">int zmienna;<br />fun(zmienna);</div><br /><br />toż to niestety totalne nieporozumienie - nawet jakbyś chciał tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">fun( &amp;zmienna );</div><br /><br />to też już miałbyś warningi przecież argument jest wskaźnikiem typu char a ty chcesz przekazać adres zmiennej typu int ??? czy sam nie widzisz w tym ZONKA ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... przecież funkcja będzie oczekiwała na wskaźnik char a ty jej wciskasz do gardła adres (wskaźnik) zmiennej typu int !!! i już masz niezgodność wskaźników. Oczywiście mógłbyś temu zapobiec robiąc jawne rzutowanie typu wskaźnikowego np tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">fun( (char*)&amp;zmienna );</div><br /><br />no ale czy wiesz co będzie tego efektem ? to zadziała - ale jeśli nie wiesz jak to tego nie rób bo się przejedziesz<br /><br /><br /><div class="quotetitle">bartool napisał(a):</div><div class="quotecontent"><br />Teraz, analizując czyjeś kody, znalazłem taki zapis:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent">float* tab_wsk_liczb [ 10 ] ;<br /></div><br />WYDAJE mi się, że jest to definicja tablicy 10-ciu wskaźników .</div><br /><br />Dobrze ci się wydaje ale zobacz jakie są ważne szczegóły - nie dokończyłeś tej definicji a to pokazuje że nie zaskoczyłeś co to są albo po co w ogóle deklaruje się TYPY wskaźników. Zatem o tej tablicy powinieneś napisać tak:<br /><br /><span style="color: #BF00BF">WYDAJE mi się, że jest to tablica 10-elementowa w której każdy element jest wskaźnikiem <strong>typu int</strong></span><br /><br /><br /><div class="quotetitle">bartool napisał(a):</div><div class="quotecontent"><br />Jeżeli to prawda, to jak to wykorzystać? Jeżeli tablica przechowuje adresy do różnych zmiennych, to nie można zrobić po prostu tak?:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent">int tablica_adres [10];<br />tablica_adres[2] = @jakas_zmienna;<br />zmienna_b = *tablica[2];<br /></div><br />Czy taki zapis jest prawidłowy?</div><br /><br />Niepotrzebnie tworzysz taki reveres-engeneering, no i znowu się mylisz, wyżej podałeś przykład tablicy wskaźników a sam podajesz przykład zwykłej tablicy, czy ty nie widzisz różnicy w zapisach:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">float* tab_wsk_liczb &#91; 10 &#93; <br /><br />int tablica_adres &#91; 10 &#93;;</div><br /><br />poza tym że różnią się typem ??????????<br /><br />przecież w twoim przykładzie brakuje gwiazdki a zatem twoja tablica to już nie jest tablica wskaźników tylko tablica 10-elementowa gdzie każdy element jest typu int. Co to ma wspólnego ze wskaźnikiem?<br /><br />dlatego w takim przypadku twój zapis:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">tablica_adres&#91;2&#93; = @jakas_zmienna;</div><br /><br />oczywiście wywoła agresję kompilatora i będzie on miał rację, chyba żebyś zmienił tablicę na taką:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">int * tablica_adres &#91; 10 &#93;;</div><br /><br />widzisz tą subtelną różnicę ????<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 cze 2012, o 18:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartool]]></name></author>
<updated>2012-06-25T18:07:34+01:00</updated>
<published>2012-06-25T18:07:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8520#p8520</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8520#p8520"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=8520#p8520"><![CDATA[
Przepraszam, że odkopuję temat wskaźników. Od kilku dni mam z tym wielki problem. To co tutaj napisaliście jest bardzo pouczające i cieszę się, że taki temat już się pojawił. Sama idea wskaźników jest mi znana i wydawała się prosta doputy, dopuki nie zacząłem analizować czyiś kodów.<br /><br />Wiadomo, że wskaźnik to nic innego jak zmienna przechowująca adres pamięci do jakieś zmiennej. Natomiast taki zapis:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />void funkcja (char *wskaznik)<br /></div><br />oznacza, że informujemy kompilator, że do funkcji przekazujemy argumenty w postaci adresu, prawda? W takim razie, wywołując wyżej wymienioną funkcje, stosujemy taki zapis:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />funkcja(@zmienna_a);    //operator pobierania adresu @<br />//albo<br />funkcja(tablica); //tablica bez nawiasów zwraca asdres pierwszego elementu<br /></div><br />(Wybczcie, że powtarzam wyżej zawarte informacje. Osobie, która to będzie czytać, bedzię łatwiej znależć miejsce, w którym zaczynam się gubić)<br />Równie dobrze można przekazać zmienną do tej funkcji, ale trzeba zadbać, aby ta zmienna była dwu bajtowa, prawda?<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />int zmienna;<br />funkcja(zmienna);<br /></div><br />Teraz, analizując czyjeś kody, znalazłem taki zapis:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />float* tab_wsk_liczb [ 10 ] ;<br /></div><br />WYDAJE mi się, że jest to definicja tablicy 10-ciu wskaźników . Jeżeli to prawda, to jak to wykorzystać? Jeżeli tablica przechowuje adresy do różnych zmiennych, to nie można zrobić po prostu tak?:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />int tablica_adres [10];<br />tablica_adres[2] = @jakas_zmienna;<br />zmienna_b = *tablica[2];<br /></div><br />Czy taki zapis jest prawidłowy?<br /><br />Nie jestem wstanie zliczyć ile razy przeczytałem rozdział dotyczący wskaźników (przypuszczam, że mógłbym go wyrecytować, nawet jakby ktoś mnie obudził w środku nocy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />). Zacząłem się gubić, jak zobaczyłem połączenie struktur ze wskaźnikami, ale po kolei. Proszę szanownych kolegów wskazanie mi gdzie popełniam błąd w rozumowaniu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=402">bartool</a> — 25 cze 2012, o 18:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-15T13:09:28+01:00</updated>
<published>2012-04-15T13:09:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5257#p5257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5257#p5257"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5257#p5257"><![CDATA[
DOKŁADNIE po definicji tak jak napisałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zobacz zresztą - zrobiłeś teraz wręcz fajny wykład na ten temat - czyli potwierdza się to co ja zawsze mówię że gdy chcemy kogoś nauczyć to sami się jeszcze 2x więcej uczymy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... zatem życzę więcej takich fajnych wykładów - poważnie takie rozważanie tutaj to fajne uzupełnienie do książki i będę ten wątek polecał innym na forum <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />&quot;po co stosuje się kopie wskaźników?&quot; ..... hm tak z gruszki bez jakiegoś przykładu to ciężko nieraz wprost odpowiedzieć, ale może coś podpowie ci zasada działania np funkcji strtok_r() lub podobnych gdzie jednym z argumentów jest wskaźnik do wskaźnika <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czyli niejako przekazujemy kopię wskaźnika <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... Opisałem wykorzystanie tego w praktyce w książce w rozdziale dotyczącym Ethernetu przy komunikacji UDP ....<br /><br />ale są też inne funkcje przyjmujące podobne argumenty - gdzie wyglądają mniej więcej np tak:<br />void fun( char ** s);<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> fajnie co ?<br /><br />a tak jeśli chodzi o proste przykłady typu że b wskazuje na zmienną a natomiast c wskazuje na b - to nic do głowy mi na gorąco nie przychodzi. Na co dzień rzadko się raczej korzysta ze wskaźników do wskaźników - to już raczej w jakichś bardziej zakręconych przypadkach gdzie nie ma innego wyjścia i właśnie dopiero wskaźniki mogą nas wybawić z opresji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 kwi 2012, o 13:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Beens]]></name></author>
<updated>2012-04-15T12:20:01+01:00</updated>
<published>2012-04-15T12:20:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5255#p5255</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5255#p5255"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5255#p5255"><![CDATA[
Witaj Mirek!<br />Dzięki za wyjaśnienia. O dwubajtowości wskaźnika pamiętam (bo przeczytałem rozdział o wskaźnikach chyba już z 8 razy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ) tutaj rzeczywiście podałem przez omyłkę zły adres komórki pamięci - dzięki za sprostowanie. Wydaje mi się jednak że mój problem polega na złym rozumowaniu definiowaniu i jednoczesnym inicjowaniu wskaźnika. Definiujemy sobie zmienną i wskaźnik ale inicjujemy od razu tylko zmienną:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">uint8_t a = 10;<br />uint8_t *b;</div><br />i wtedy rozumiem że aby wskazać na zmienną <strong>a</strong> za pomocą wskaźnika <strong>b</strong> trzeba:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">b = &amp;a</div> - bo jak damy gwiazdkę przy <strong>b</strong> to odwołamy się do jakiejś tam komórki której losowy adres przechowuje niezainicjowana komórka pamięci wskaźnika <strong>b</strong> i będzie błąd bo będziemy próbowali wrzucić dwa bajty do zmiennej jednobajtowej (z definicji wskaźnika uint8_t) zgadza się?<br /><br />Dlatego aby coś zapisać do <strong>a</strong> mogę się posługiwać na przemiennie:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">a = 11 lub *b = 11</div><br /><br />a jeśli definiujemy wskaźnik i od razu go inicjujemy to piszemy tak <strong>??</strong>:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">uint8_t *b = &amp;a </div><br />a po definicji tak<strong>??</strong>:<div class="codetitle"><b>Code:</b></div><div class="codecontent"> b = &amp;a </div><br />Sądziłem że kompilator przy definicji wskaźnika i jego jednoczesnym inicjowaniu sam &quot;wyciągnie&quot; adres zmiennej na jaką ma wskazywać. Dalsze postępowanie ze wskaźnikami rozumiem problem mam tylko z ich definicją i jednoczesną inicjacją - jeśli dobrze posługuję się tutaj słowem inicjacja.<br /><br />Proszę odpowiedz jeszcze na pytanie z pierwszego postu: po co stosuje się kopie wskaźników?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=80">Beens</a> — 15 kwi 2012, o 12:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-15T09:52:38+01:00</updated>
<published>2012-04-15T09:52:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5246#p5246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5246#p5246"/>
<title type="html"><![CDATA[Re: Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5246#p5246"><![CDATA[
No wszystko ładnie pięknie tylko koledze umknęła pewna rzecz albo nawet dwie rzeczy (ale nie ma co się martwić - na początku przy wskaźnikach chyba każdy tak ma) - bo:<br /><br />jeśli:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">uint8_t a = 10 </div><br /><br />i załóżmy że jak mówisz (to tylko założenie i tego się nie trzymamy sztywno w C) adres fizyczny to 01<br /><br />to jeśli chcesz zrobić wskaźnik na tą zmienną to MUSISZ się posłużyć operatorem wyciągania adresu <strong><span style="color: #0040FF"><span style="font-size: 200%; line-height: normal">&amp;</span></span></strong> (<span style="color: #0040FF"><strong>znak AND</strong></span>) (to pierwsze co przeoczyłeś) ... czyli:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">uint8_t *b = &amp;a</div><br /><br />i teraz UWAŻAJ - druga rzecz jaką przeoczyłeś (a jest o tym w książce też na pewno), że KAŻDY wskaźnik zajmuje w pamięci 2 bajty !!! to bardzo ważne - 2 bajty. To jest miejsce na adres w pamięci, który może przyjmować wartości od 0 do 65535 - o tym nie można zapominać.<br /><br />dlatego nie można tego tak sobie opisać:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />załóżmy że ląduje pod adresem 0x02<br />czyli b = 0x01<br /><br />teraz robimy kopie wskaźnika<br />uint8_t *c = b<br />załóżmy że ląduje pod adresem <strong><span style="color: #FF0000"><span style="font-size: 150%; line-height: normal">0x03</span></span></strong><br /></div><br /><br />bo już wskaźnik c będzie (załóżmy) pod adresem 04 .... to ważne a co jeszcze ważniejsze spójrz, skoro b to wskaźnik to tylko dlatego mogłeś zrobić:<br /><br /><strong>uint8_t *c = b;</strong>  -----&gt; widzisz ? tak można bo do c (wskaźnika 2 bajtów) wpisujesz od razu adres 16-bitowy b - więc nie trzeba było operatora wyciągania adresu jak przy<br /><br /><strong><span style="color: #008000"><span style="font-size: 150%; line-height: normal">uint8_t *b = &amp;a;</span></span></strong> -----&gt; tutaj gdybyś nie użył &amp; to dostałbyś warninga. Bo bez operatora &amp; to ty chciałbyś pod wskaźnik (adres) b zapisać WARTOŚĆ zmiennej a czyli 10, a nie adres pod którym ta zmienna się znajduje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Spójrz sobie zresztą na pierwsze rysunki w rozdziale &quot;WSKAŹNIKI&quot; - one powinny pomóc<br /><br /><br />no i na koniec:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Myślałem do tej pory że aby zrobić kopię wskaźnika trzeba zapisać:<br />uint8_t *c = <span style="color: #FF0000"><span style="font-size: 150%; line-height: normal"><strong>*</strong>b</span></span><br /></div><br /><br />taki zapis znowu oznaczałby że ty do wskaźnika c chcesz zapisać to na co wskazuje wskaźnik b (bo dałeś gwiazdkę przed b) ..... a nie adres b <br /><br />gwiazdka w przypadku definicji<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">uint8_t *c</div><br /><br />mówi tylko o tym, że to jest definicja wskaźnika !!!<br /><br />ale w kodzie później:<br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #008000">*c</span></span></strong> - oznacza to na co wskazuje wskaźnik<br /><br />a<br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #0040FF">c</span></span></strong> - oznacza fizyczny adres<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 kwi 2012, o 09:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Beens]]></name></author>
<updated>2012-04-14T22:34:26+01:00</updated>
<published>2012-04-14T22:34:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5238#p5238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5238#p5238"/>
<title type="html"><![CDATA[Kopia wskaźnika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=994&amp;p=5238#p5238"><![CDATA[
Witam Wszystkich! Pisze na forum bo już nie mam sumienia truć Mirkowi... Sprawa jak mnie nurtuje od dłuższego czasu to kopia wskaźnika. Dokładnie mówiąc stron 254 II wydania na samym dole. Moje rozumowanie jest takie:<br />Mamy zmienną:<br />uint8_t a = 10<br />załóżmy że ląduje pod adresem 0x01<br />potem mamy wskaźnik na tą zmienną<br /><br />uint8_t *b = a<br />załóżmy że ląduje pod adresem 0x02<br />czyli b = 0x01<br /><br />teraz robimy kopie wskaźnika<br />uint8_t *c = b<br />załóżmy że ląduje pod adresem 0x03<br />według mojego rozumowania wskaźnik c wskazuje na komórkę pamięci wskaźnika b więc w tej komórce powinien się znaleźć adres komórki b czyli 0x02, a nie 0x01:<br />czyli c = 0x02<br /><br />Myślałem do tej pory że aby zrobić kopię wskaźnika trzeba zapisać:<br />uint8_t *c = *b<br /><br />Czy może kompilator wie, że b jest wskaźnikiem i nie wpisuje w c adresu komórki wskaźnika b lecz ten adres na który wskazuje ponieważ właśnie jest wskaźnikiem?<br />Przewertowałem całą teorie w książce i nie znalazłem tam nic na temat kopwiowania wskaźników więc stąd mój problem.<br />Drugie pytanie to po co w tym przypadku (str 254) zastosowano kopie wskaźnika? Oba wskaźniki wskazują na jedną i tę samą komórke pamięci więc czy nie można operować na samym wskaźniku *str? Nie pytam dlatego że się czepiam ale wydaje mi się że był to celowy zabieg i dokładniejsze poznanie tematu nauczyłby mnie dobrych nawyków. Bo jak potem jakiś nawyk trzeba będzie zmienić będzie o wiele trudniej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Serdecznie pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=80">Beens</a> — 14 kwi 2012, o 22:34</p><hr />
]]></content>
</entry>
</feed>