{"id":19454,"date":"2015-07-02T20:44:24","date_gmt":"2015-07-02T18:44:24","guid":{"rendered":"http:\/\/kmim.wm.pwr.edu.pl\/myszka\/?p=19454"},"modified":"2015-07-02T20:44:24","modified_gmt":"2015-07-02T18:44:24","slug":"kilka-uwag-czesc-2","status":"publish","type":"post","link":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/2015\/07\/02\/kilka-uwag-czesc-2\/","title":{"rendered":"Kilka uwag\u2026 (cz\u0119\u015b\u0107 2)"},"content":{"rendered":"<p>Ogl\u0105daj\u0105c kawa\u0142ek kodu starajcie si\u0119 zastanawia\u0107 precyzyjnie co oznacza ka\u017cdy jego fragment.<\/p>\n<ol start=\"1\" type=\"1\">\n<li>Widzimy <code>2<\/code> Jest to sta\u0142a typu <code>int<\/code>. <code>2.<\/code> (dw\u00f3jka z kropk\u0105) to sta\u0142a typu double. (Jak w tym kontek\u015bcie wygl\u0105da sta\u0142a typu <code>float<\/code>?). Co to jest <code>'a' <\/code>? Jest to sta\u0142a typu <code>char<\/code>. Natomiast <code>\"a\"<\/code> to sta\u0142a typu <code>char *<\/code> (\u201echar gwiazdka\u201d, czyli wska\u017anik do tego miejsca w pami\u0119ci, w kt\u00f3rym zapisany jest napis o d\u0142ugo\u015bci dwu znak\u00f3w sk\u0142adaj\u0105cy si\u0119 ze znaku <code>'a' <\/code>i znaku o kodzie <code>0<\/code> (<code> '\\0' <\/code>).<\/li>\n<li>Widzimy gwiazdk\u0119 (*) patrzymy w jakim kontek\u015bcie ona wyst\u0119puje. Czy jest to kontekst typu <code>a * b<\/code> (albo <code>2 * b<\/code>)? Je\u017celi tak, gwiazdka ma charakter dwuargumentowego operatora mno\u017cenia. gdy wyst\u0119puje na lewo od zmiennej (<code>* a<\/code>) w\u00f3wczas je\u017celi zmienna zadeklarowana jest jako wska\u017anik (na przyk\u0142ad <code>double * a;<\/code>) to <code>*a<\/code> oznacza dost\u0119p do zawarto\u015bci pami\u0119ci wskazywanej przez wska\u017anik. Gdy po lewej stronie znaku nie ma nic, a po prawej stronie jest sta\u0142a albo zmienna \u2014 b\u0119dzie b\u0142\u0105d.<\/li>\n<li>Przypominam, \u017ce identycznie rozr\u00f3\u017cnia si\u0119 jednoargumentowy znak <code>-<\/code> (zmiana znaku, na przyk\u0142ad: <code>-3<\/code>) od dwuargumentowego operatora <code>-<\/code> (odejmowanie, na przyk\u0142ad <code>a - b<\/code>).<\/li>\n<li>O sta\u0142ych (i zmiennych) typu znakowego pami\u0119tamy, \u017ce mog\u0105 by\u0107 traktowane jako sta\u0142e (i zmienne) typu ca\u0142kowitego. W zwi\u0105zku z tym wszystkie operacje arytmetyczne s\u0105 dozwolone. Zatem <code>'a'\/200\u00a0<\/code>interpretujemy tak: Iloraz. Dzielna to sta\u0142a znakowa (o nieznanej z pami\u0119ci warto\u015bci ca\u0142kowitej mieszcz\u0105cej si\u0119 pomi\u0119dzy 0 a 127). Dzielnik &#8211; sta\u0142a ca\u0142kowita o warto\u015bci 200. Poniewa\u017c po obu stronach znaku dzielenia s\u0105 sta\u0142e zbli\u017conego typu (<code>char<\/code> jest r\u00f3wnowa\u017cne <code>int<\/code>) dzielenie ma charakter ca\u0142kowity: co\u015b mniejsze od 200 dzielone przez dwie\u015bcie, daje w wyniku 0. W \u017cadnym wypadku nie jest to<em>dzielenie litery a n 200 cz\u0119\u015bci czy kawa\u0142k\u00f3w<\/em>. Poprawny jest r\u00f3wnie\u017c zapis <code>float a = 'a';<\/code>. Zostanie dokonana tu konwersja z <code>char<\/code> do <code>int<\/code> a nast\u0119pnie do <code>float<\/code>.<\/li>\n<li>Ogl\u0105daj\u0105c kawa\u0142ek kodu nie patrzcie na wci\u0119cia: przecie\u017c prawie nigdy ich nie stosujecie! Patrzcie na nawiasy klamrowe i czy s\u0105 sparowane. Nie jest prawd\u0105, \u017ce po ka\u017cdej instrukcji <code>if<\/code>, <code>else<\/code> czy <code>else if<\/code> musi by\u0107 para nawias\u00f3w. Jak jest tam tylko jedno polecenie \u2014 nie musi.<\/li>\n<li>Dynamiczny przydzia\u0142 pami\u0119ci to przydzia\u0142 pami\u0119ci realizowany za pomoc\u0105 funkcji <code>malloc<\/code> (<code>calloc<\/code>) i odbywa si\u0119 on w trakcie uruchamiania programu, nie w czasie kompilacji, czy \u0142adowani programu do pami\u0119ci.<\/li>\n<li>Wielokrotnie wspomina\u0142em o funkcji \u201eswap\u201d i o konieczno\u015bci realizowania jej za pomoc\u0105 wska\u017anik\u00f3w \u2014 w przeciwnym razie efekt zamiany nie powoduje \u017cadnych skutk\u00f3w. Jedno z zada\u0144 (F) to by\u0142y r\u00f3\u017cne warianty tego problemu. Nie uwa\u017cam (w odr\u00f3\u017cnieniu od niekt\u00f3rych) \u017ce przyk\u0142ad ten by\u0142 <em>niejasny i pogmatwany<\/em>. W\u0142a\u015bciwe u\u017cycie wska\u017anik\u00f3w b\u0105d\u017a ich brak wp\u0142ywaj\u0105 na wynik.<\/li>\n<li>Poni\u017cej jak najbardziej poprawna definicja funkcji:\n<pre><code>f(x)\r\n{\r\n   return x * x;\r\n}\r\n<\/code><\/pre>\n<p>zwracam uwag\u0119, e nie zosta\u0142 tu okre\u015blony typ argumentu ani typ funkcji. Zgodnie z konwencj\u0105 j\u0119zyka C w tym przypadku zapis taki jest r\u00f3wnowa\u017cny <code>int f(int x)<\/code>. W szczeg\u00f3lno\u015bci mo\u017cna zatem napisa\u0107 \u00a0<code>main (){}<\/code><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Ogl\u0105daj\u0105c kawa\u0142ek kodu starajcie si\u0119 zastanawia\u0107 precyzyjnie co oznacza ka\u017cdy jego fragment. Widzimy 2 Jest to sta\u0142a typu int. 2. (dw\u00f3jka z kropk\u0105) to sta\u0142a typu double. (Jak w tym kontek\u015bcie wygl\u0105da sta\u0142a typu float?). Co to jest 'a&#8217; ? Jest to sta\u0142a typu char. Natomiast &#8222;a&#8221; to sta\u0142a typu char * (\u201echar gwiazdka\u201d, czyli &hellip; <a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/2015\/07\/02\/kilka-uwag-czesc-2\/\" class=\"more-link\">Czytaj dalej <span class=\"screen-reader-text\">Kilka uwag\u2026 (cz\u0119\u015b\u0107 2)<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":19359,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[112],"tags":[104,102],"class_list":["post-19454","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jezyk-c","tag-air","tag-mechatronika"],"publishpress_future_action":{"enabled":false,"date":"2026-05-12 00:04:22","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"category","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts\/19454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/comments?post=19454"}],"version-history":[{"count":2,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts\/19454\/revisions"}],"predecessor-version":[{"id":19456,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/posts\/19454\/revisions\/19456"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media\/19359"}],"wp:attachment":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media?parent=19454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/categories?post=19454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/tags?post=19454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}