<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-3132276620877189877</id><updated>2012-04-08T07:37:51.800-07:00</updated><category term="Си" /><category term="PHP" /><category term="уроки" /><category term="chendex" /><category term="мысли" /><category term="SQL" /><category term="блоги" /><category term="js" /><category term="косяк" /><category term="работа" /><category term="C" /><category term="фильм" /><category term="кал" /><category term="БД" /><category term="жара" /><category term="хочу денег" /><category term="Perl" /><category term="код" /><category term="yandex" /><category term="хрен" /><category term="утилита" /><category term="жизнь" /><title type="text">Записки студента</title><subtitle type="html">Блог про жизнь &lt;strike&gt;студента&lt;/strike&gt; бывшего студента</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default?start-index=26&amp;max-results=25" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>61</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/prog-student" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="prog-student" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-2072791245690269074</id><published>2012-02-02T13:02:00.000-08:00</published><updated>2012-02-02T13:02:00.413-08:00</updated><title type="text">Нашел на баш.орг.ру :)</title><content type="html">&lt;quote&gt;&lt;br /&gt;&lt; emilevictor&gt; .... почему? я не понимаю. если я делаю указатель x и присваиваю ему 0, то почему *x - не 0?&lt;br /&gt;&lt; ciaranm&gt; emilevictor: указатель указывает на адрес, в данном случае 0x0. а *x - это данные по этому адресу, скорее всего равные "segmentation fault"&lt;br /&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-2072791245690269074?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/2072791245690269074/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2012/02/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/2072791245690269074" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/2072791245690269074" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2012/02/blog-post.html" title="Нашел на баш.орг.ру :)" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-2543126329500113196</id><published>2012-01-30T05:06:00.001-08:00</published><updated>2012-03-22T12:27:26.043-07:00</updated><title type="text">между делом</title><content type="html">Помогал инет-знакомому сделать кой-какой модуль на Flash (давно уже, где-то год назад), тот наконец-то проект запустил &lt;a href="http://prapra.ru/"&gt;генеалогическое древо семьи своими руками&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Знайте - там есть частичка меня :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-2543126329500113196?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/2543126329500113196/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2012/01/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/2543126329500113196" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/2543126329500113196" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2012/01/blog-post.html" title="между делом" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-8062583831734397671</id><published>2012-01-23T06:57:00.000-08:00</published><updated>2012-01-23T07:07:48.607-08:00</updated><title type="text">Центрирование при зуме(zoom) или зачем нужна математика</title><content type="html">На новом проекте делали масштабирование и нужно было сделать что при изменение масштаба центр эээ &lt;strike&gt;вселенной&lt;/strike&gt; картинки оставался на месте (т.е. в центре).&lt;br /&gt;&lt;br /&gt;Реализовывал все это наш новенький программист. Он из тех, кто считает, что вузы нафик не нужны (кстати недавно узнал, что вуз теперь не аббревиатура, а потому пишется не заглавными), так вот он долго втыкал в функцию центровки объекта по средине экрана.&lt;br /&gt;Скажем: &lt;code&gt;off1 = x*sw*kof - scrX/2&lt;/code&gt;, затем думал.&lt;br /&gt;Думал от прошлой среды то понедельника, вернее говорит еще все выходные думал и выдал на формулу:&lt;br /&gt;&lt;code&gt;off1 = (sw*kof1*off2+sw*kof1*scrX/2 - (scrX/2)*sw*kof2)/(sw*kof2)&lt;/code&gt;&lt;br /&gt;На мой вопрос, а можно ли ее сократить - ответил, что нет.&lt;br /&gt;&lt;br /&gt;Новая формула для &lt;em&gt;центрирования при изменения масштаба&lt;/em&gt; сейчас такая: &lt;code&gt;offX = (newkof*offX + (newkof-oldkof)*screenX/2)/oldkof;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Да-да, простое математическое деление. С другой стороны, зачем вузы если и в школе было не все понятно?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-8062583831734397671?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/8062583831734397671/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2012/01/zoom.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/8062583831734397671" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/8062583831734397671" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2012/01/zoom.html" title="Центрирование при зуме(zoom) или зачем нужна математика" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-8152081908636681840</id><published>2011-11-02T12:33:00.000-07:00</published><updated>2011-11-02T12:34:58.954-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><title type="text">Незнал</title><content type="html">У Perl:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;my @arr;&lt;br /&gt;push @arr,'element';&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В PHP:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$arr = array();&lt;br /&gt;$arr[] = 'element';&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Вот такой &lt;strong&gt;push&lt;/strong&gt; в &lt;strong&gt;PHP&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-8152081908636681840?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/8152081908636681840/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2011/11/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/8152081908636681840" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/8152081908636681840" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2011/11/blog-post.html" title="Незнал" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-3815417751230899402</id><published>2011-10-14T06:42:00.000-07:00</published><updated>2011-10-14T06:44:44.183-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><title type="text">Почему и нет?</title><content type="html">Вот удивляюсь почему в &lt;strong&gt;Perl&lt;/strong&gt; нет унарных правых циклов?&lt;br /&gt;&lt;br /&gt;Ну как бы красиво смотрелось print("Daesh molodeshz!") for($i=0;$i&lt;10;$i++);&lt;br /&gt;&lt;br /&gt;Почему унарные условия есть, а циклы (те-же яйца только в профиль) нету?&lt;br /&gt;&lt;br /&gt;Чтож за убожество писать for($i=0;$i&lt;10;$i++) {print("Daesh molodeshz!")}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-3815417751230899402?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/3815417751230899402/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2011/10/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/3815417751230899402" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/3815417751230899402" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2011/10/blog-post.html" title="Почему и нет?" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-8951047539578111916</id><published>2011-05-11T11:06:00.000-07:00</published><updated>2011-05-13T11:05:20.948-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="хочу денег" /><title type="text">Алкоголь - это зло</title><content type="html">И точка.&lt;br /&gt;&lt;br /&gt;И такое чувство что я это уже писал...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-8951047539578111916?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/8951047539578111916/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2011/05/blog-post.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/8951047539578111916" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/8951047539578111916" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2011/05/blog-post.html" title="Алкоголь - это зло" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-6705861005108660684</id><published>2011-04-08T09:17:00.000-07:00</published><updated>2011-04-08T09:18:20.060-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><title type="text">PHP – гавно</title><content type="html">В конце зимы, наша фирма взяла новый проект, который нужно было срочно сделать до конца марта, и который , билиать, должен быть сделан на PHP, потому что, гребанные программисты из &lt;strike&gt;депо&lt;/strike&gt; из контры не разберутся.&lt;br /&gt;&lt;br /&gt;Ну что же – партия сказала надо – комсомол ответил есть. Начали писать, да мне вообще побоку на каком &lt;em&gt;скриптовом&lt;/em&gt; языке писать, пусть сегодня на PHP.&lt;br /&gt;&lt;br /&gt;Куча кода (действительно несколько сотен килобайт) – база (билиать вы не поверите – mysql), однако к сегодняшнему дню все работает, даже база (что стоит сказать мускул не так уж плох, как я раньше думал – почти миллион записей – работает, ежели конечно от туда чего нить не удалить – тогда жопа).&lt;br /&gt;&lt;br /&gt;Но язык – ужас, одним словом – выкидыш от C и Perl. Но простой и легкий. Как ежик – как и все PHP-программисты.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-6705861005108660684?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/6705861005108660684/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2011/04/php.html#comment-form" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/6705861005108660684" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/6705861005108660684" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2011/04/php.html" title="PHP – гавно" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-930321541832500651</id><published>2011-02-11T11:33:00.000-08:00</published><updated>2011-02-11T11:46:58.908-08:00</updated><title type="text">Жизнь и Хмель</title><content type="html">Довольное время я приходя с работы, покупал &lt;strike&gt;пару&lt;/strike&gt; не пару пива, и начинал кодить. &lt;br /&gt;&lt;br /&gt;Скажу сразу пишу код я одинаково быстро, единственно что иногда не попадаю сразу на нужные клавиши. Так вот, прошло уже больше года как я работаю в фирме и начал замечать, что когда выпью (как сегодня - скажем по пятницам), то чаще хочу быстро доделать рутину, нежели придумывать нечто новое.&lt;br /&gt;&lt;br /&gt;Это я осознал еще в вторник, и подумал, что не буду пить всю неделю. В четверг вечером, я закончил нехилый кусок, который рассчитывал доделать в середине марта.&lt;br /&gt;&lt;br /&gt;Сегодня, у девочки из бухгалтерии было день рождения, и потому выпили. Чуть-чуть, за здоровье, ножки и прочие части именинницы.&lt;br /&gt;&lt;br /&gt;Думал сегодня чего-нить дописать, и понял максимум - что смогу - это эту запись в блог.&lt;br /&gt;Зато Мариночка так страстно поцеловала на прощание ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-930321541832500651?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/930321541832500651/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2011/02/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/930321541832500651" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/930321541832500651" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2011/02/blog-post.html" title="Жизнь и Хмель" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-285442109127712655</id><published>2011-01-25T08:21:00.000-08:00</published><updated>2011-01-25T08:23:35.291-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="уроки" /><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Си" /><title type="text">Строки и функции с ними</title><content type="html">Как мы уже поняли из &lt;a href="http://prog-student.blogspot.com/p/cc-language.html"&gt;предыдущих&lt;/a&gt; уроков, строки это всего лишь набор байтов, а точнее массив типа &lt;em&gt;char&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Сегодня рассмотрим функции, которые можно использовать на &lt;strike&gt;кошках&lt;/strike&gt; строках.&lt;br /&gt;&lt;br /&gt;Отмечу, что легко написать свои аналогичные функции и они будут выполняться также быстро, как и библиотечные (в этом и прелесть Си), но с другой стороны &lt;em&gt;на какой изобретать велосипед?&lt;/em&gt;&lt;br /&gt;Начнем-с.&lt;br /&gt;&lt;br /&gt;Длина строки &lt;strong&gt;strlen&lt;/strong&gt; - возвращает количество символов до символа \0. При передаче мусора – программа может выпасть или зависнуть, если будет искать этот самый символ бесконечно.&lt;br /&gt;Возвращает – без знаковое целое число (&lt;em&gt;unsigned int&lt;/em&gt;), что в принципе логично – длина строки явно положительная величина.&lt;br /&gt;&lt;br /&gt;Копировать строку в строку &lt;strong&gt;strcpy&lt;/strong&gt;. Копирует в заданную строку, другую без ограничения размера первой строки, пока у второй строки не попадется символ \0, символ \0 также копируется. Синтаксис &lt;em&gt;strcpy(v, ”Hello”);&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Для копирования определенного количества символов нужно использовать &lt;strong&gt;strncpy&lt;/strong&gt;, где указывается количество копируемых символов, также не контролируется размер исходной строки, синтаксис &lt;em&gt;strncpy(v, ”Hello”, 4)&lt;/em&gt;, но в этом случае символ \0 не добавляется в конец исходной строки (иными словами strncpy это алиас memcpy и не более того)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Поиск заданного символа в строке &lt;strong&gt;strchr&lt;/strong&gt; - возвращает указатель на символ, либо NULL, если символа увы нет. Синтаксис - &lt;em&gt; v=strchr(str,'a')&lt;/em&gt;, где &lt;em&gt;v&lt;/em&gt;, указатель на char (&lt;em&gt;char *&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;Поиск заданной подстроки в строке &lt;strong&gt;strstr&lt;/strong&gt; - возвращает указатель на первый символ в строке в случае успеха, а в случае неудачи возвращает… NULL!&lt;br /&gt;Синтаксис: &lt;em&gt;v = strstr(str, "Hello");&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Сравнение строк &lt;strong&gt;strcmp&lt;/strong&gt; - возвращает 0 в случае полного сравнения, 1 если первая строка больше, -1 если меньше. Больше и меньше – это конечно по ASCII-коду символа, который не совпал. Удобно для сортировки. &lt;br /&gt;У функции есть более прогрессивный потомок &lt;strong&gt;strncmp&lt;/strong&gt;, который также сравнивает строки, но  только до определенной позиции(длины).&lt;br /&gt;Синтаксис: &lt;em&gt;strncmp(str, "hello", 4)&lt;/em&gt; - т.е. добавилось только количество сравниваемых символов.&lt;br /&gt;&lt;br /&gt;Даже не знаю, что добавить. Хотя, помню когда я пришел в Си из Бейсика мне часто не хватало функции MID, или &lt;strong&gt;substr&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Ответ пришел очевиден – допустим нужно сравнить строку на совпадение трех символов, начиная с второго как 'ID:', а последующие 4 тогда определить как число. Исходная строка: &lt;em&gt;xID:0034User&lt;/em&gt;&lt;br /&gt;В Си &lt;code&gt;if ( (v = strnstr(str+1,’ID:’))) {strncpy(temp,str+4,4);temp[4]=0;id=atoi(temp);}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-285442109127712655?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/285442109127712655/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2011/01/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/285442109127712655" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/285442109127712655" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2011/01/blog-post.html" title="Строки и функции с ними" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-1452999724681931524</id><published>2010-12-30T12:42:00.000-08:00</published><updated>2010-12-30T12:48:17.846-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="уроки" /><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Си" /><title type="text">Структуры в C (С, Си)</title><content type="html">Привет, с вами опять я - &lt;a href="http://prog-student.blogspot.com/"&gt;кодер&lt;/a&gt; -бывший студент&lt;br /&gt;Иногда есть необходимость сгруппировать некоторые данные, допустим вы делайте программу, которая подбирает лучшую девушку 2011.&lt;br /&gt;&lt;br /&gt;Конечно можно использовать ряд массивов, например &lt;code&gt;char NameGirl[10]={"Sveta","Anja",....};int AgeGirl[10]={21,23,...}&lt;/code&gt; и т.д.&lt;br /&gt;&lt;br /&gt;Но лучше использовать структуры.&lt;br /&gt;Структура &lt;strong&gt;struct&lt;/strong&gt; это объеденение нескольких переменных разных или однотипных в одну пачку.&lt;br /&gt;&lt;br /&gt;Синтаксис&lt;br /&gt;struct &lt;em&gt;уникальное_название_вашей_структуры&lt;/em&gt;&lt;br /&gt;{&lt;br /&gt;&lt;em&gt;переменные, например int age;&lt;/em&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Но я &lt;b&gt;не рекомендую&lt;/b&gt; использовать такой синтаксис, более простой способ это использовать &lt;strong&gt;typedef&lt;/strong&gt;, описание структуры будет в этом случае, таким:&lt;br /&gt;typedef struct&lt;br /&gt;{&lt;br /&gt;&lt;em&gt;переменные, например int age;&lt;/em&gt;&lt;br /&gt;} &lt;em&gt;уникальное_название_tp&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;В чем разница? В объявлении (в функциях и как переменные),&lt;br /&gt;в первом случае вы должны будете писать &lt;code&gt;struct &lt;em&gt;уникальное_название_вашей_структуры&lt;/em&gt; имя_переменной&lt;/code&gt;, &lt;br /&gt;во-втором случае всего &lt;code&gt;уникальное_название_tp имя_переменной;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Допустим:&lt;br /&gt;typedef struct&lt;br /&gt;{&lt;br /&gt;char name[30];&lt;br /&gt;short age;&lt;br /&gt;char virgin;&lt;br /&gt;char like_drink;&lt;br /&gt;char emo;&lt;br /&gt;} TS_Girl;&lt;br /&gt;&lt;br /&gt;В Си, нет булевых типов переменных (они есть только в C++ - &lt;em&gt;bool&lt;/em&gt;), потому используем char, но для кода на самом деле все равно, булевая переменная из C++, занимает в памяти также 1 байт, а не 1 бит - как кажется.&lt;br /&gt;&lt;br /&gt;Теперь TS_Girl - это, что-то типа переменной и можно сделать так:&lt;br /&gt;TS_Girl girl_from_work[10];&lt;br /&gt;Тут мы объявили массив структур, обращение к структуре будет выглядеть так:&lt;br /&gt;&lt;code&gt; if (girl_from_work[0].age &amp;gt; 30) continue;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Обращение к членам структуры - через точку &lt;code&gt;TS_Girl wounder_girl;&lt;br /&gt;if (wounder_girl.emo != 0) printf("Не повезло!\n");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В чем прелесть структур - что (кроме группировки) - что данные хранятся в одном месте и последовательно друг-за другом.&lt;br /&gt;Системная функция &lt;strong&gt;sizeof&lt;/strong&gt; вернет размер струтуры, в моем случае sizeof(TS_Girl) вернет 35.&lt;br /&gt;Можно эти данные копировать/записовать как область памяти, например &lt;code&gt;write(file,(char*)&amp;girl_from_work[i],sizeof(TS_Gril));&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В некоторых (поздних)версиях С, в структурах появились функции - но это язычество, сын мой, избегай этого! &lt;br /&gt;Есть классы (в C++), а есть структуры и не стоит мешать мух с котлетами.&lt;br /&gt;&lt;br /&gt;&lt;div style='border: #0000ee solid 2px;'&gt;&lt;a href="http://feeds.feedburner.com/prog-student"&gt;Подпишись на обновления блога&lt;/a&gt; - будь в курсе&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-1452999724681931524?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/1452999724681931524/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/12/c.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1452999724681931524" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1452999724681931524" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/12/c.html" title="Структуры в C (С, Си)" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-363747470776414320</id><published>2010-12-20T11:56:00.000-08:00</published><updated>2010-12-20T12:00:25.275-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="уроки" /><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Си" /><title type="text">Циклы и условия</title><content type="html">Объединил их в один урок, т.к. на самом деле - это одно и тоже - проверка условия и выполнения оператора или блока операторов.&lt;br /&gt;Разница только в том, один раз выполняется блок/операнд или несколько - по условию.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Условия&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Как и в множества других языках - блок проверки условия называется &lt;strong&gt;if&lt;/strong&gt; - в переводе &lt;em&gt;если&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;После &lt;strong&gt;if&lt;/strong&gt; пишется условие в круглых скобках, а затем один операнд (с замыкающей ;), либо блок (в фигурных скобках).&lt;br /&gt;&lt;br /&gt;Например:&lt;br /&gt;&lt;code&gt;if (age &amp;gt; 21) printf("You may'be buy VODKA\n");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Комбинирование условий&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;В блоке проверки условий можно проверять не одно, а несколько условий - написано в некоторых учебниках и самоучителей.&lt;br /&gt;&lt;font size=+1 color=#aa1111&gt;Это все вранье и чушь!&lt;/font&gt; - В блоке &lt;strong&gt;if&lt;/strong&gt; проверяется &lt;u&gt;только&lt;/u&gt; одно условие, а операции &amp;&amp; - &lt;strong&gt;и&lt;/strong&gt;, и || - &lt;strong&gt;или&lt;/strong&gt; - это &lt;font size=+1 color=#aa1111&gt;операции&lt;/font&gt; над значениями.&lt;br /&gt;&lt;br /&gt;Допустим &lt;code&gt;if (age &amp;gt; 21 &amp;&amp; sex == SX_MAN)&lt;/code&gt; на самом деле сначала выполняется решение условия в скобках, все операции имеют разный &lt;strong&gt;приоритет&lt;/strong&gt; (из школы вам известно что умножить приоритетнее, чем сложение), а у операций &amp;&amp; и || - самый низкий приоритет.&lt;br /&gt;&lt;br /&gt;Выполняется первая часть (проверка идет справа налево) проверка на пол и ее значение запоминается, затем идет проверка на возраст и ее значение запомниается (обе части получают значение true или false), а далее выполняется третья операция &amp;&amp; (и) - и если обе части true - то и общее значение будет true.&lt;br /&gt;&lt;br /&gt;Если нужно выполнить разные блоки при срабатывание и не срабатывания условия, то используют конструкцию &lt;strong&gt;if&lt;/strong&gt; () {...} &lt;strong&gt;else&lt;/strong&gt; {}&lt;br /&gt;&lt;strong&gt;else&lt;/strong&gt; в переводе &lt;em&gt;иначе&lt;/em&gt;.&lt;br /&gt;Логично - сделай так если условие и иначе если не так.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Циклы&lt;/h3&gt;&lt;br /&gt;При реализации алгоритма цикла можно использовать любой способ т.е. любую запись, и самое главное при любом случае - в машинных кодах получится одно и тоже, но вот для более понятного исходников их делят:&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;strong&gt;for&lt;/strong&gt; - для&lt;/h4&gt;&lt;br /&gt;Цикл &lt;strong&gt;for&lt;/strong&gt; чаще всего используется там, где нужно выполнить заранее известное количество иттераций (циклов).&lt;br /&gt;&lt;br /&gt;Синтаксис&lt;br /&gt;for(&lt;em&gt;условия иницилизации&lt;/em&gt; ; &lt;em&gt;блок проверки&lt;/em&gt; ; &lt;em&gt;блок выполняемый при каждом цикле - блок шага&lt;/em&gt;) {...}&lt;br /&gt;Вместо блока операндов, можно также писать один операнд - если это необходимо.&lt;br /&gt;&lt;br /&gt;Пример:&lt;br /&gt;&lt;code&gt;for(i=0;i&amp;lt;10;i++) printf("i=%d\n",i);&lt;/code&gt;&lt;br /&gt;В примере в блоке &lt;em&gt;условия инициализации&lt;/em&gt; - переменной i назначается значение = 0.&lt;br /&gt;В блоке проверки переменная i проверяется, что она (переменная) меньше 10, в блоке шага - переменная i увеличивается на один.&lt;br /&gt;&lt;br /&gt;Блок инициализации выполняется всегда - а блок шага только в том случае, если выполняется условия.&lt;br /&gt;Т.е. выполняется i=0; затем проверяется i&amp;lt;10, далее выполняется блок за &lt;strong&gt;for&lt;/strong&gt; - печатается строка &lt;code&gt;printf("%d\n",i)&lt;/code&gt;, затем выполняется блок шага - i++, &lt;br /&gt;затем опять проверяется условие и если оно = &lt;strong&gt;true&lt;/strong&gt; (меньше 10 в нашем случае) - опять выполняется блок за &lt;strong&gt;for&lt;/strong&gt; и блок шага. И до тех пор пока блок условия - будет = true.&lt;br /&gt;&lt;br /&gt;В любом блоке &lt;strong&gt;for&lt;/strong&gt; можно указать несколько действий через запятую, например:&lt;br /&gt;&lt;code&gt;for(i=0,j=0; i&amp;lt;20,j&amp;lt;5; i+=2,j++) printf("i=%d,j=%d\n",i,j);&lt;/code&gt;&lt;br /&gt;Т.е. в блоке инициализации выполняем присвоение перменной i и переменной j.&lt;br /&gt;&lt;br /&gt;В блоке проверки условий выполняется два условия что i меньше 20 и j меньше 5 - на самом деле цикл будет только при выполнении всех условий - аналогично сработает (и кстати более лучше для понимания) i&amp;lt;20&amp;&amp;j&amp;lt;5&lt;br /&gt;В блоке шага, выполняется также два операнда, увеличение переменной i на два и i на один.&lt;br /&gt;Результат:&lt;br /&gt;&lt;pre&gt;i=0,j=0&lt;br /&gt;i=2,j=1&lt;br /&gt;i=4,j=2&lt;br /&gt;i=6,j=3&lt;br /&gt;i=8,j=4&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Скажу больше в блоках можно использовать даже функции, например &lt;code&gt;for(i=0,printf("start");i&amp;lt;10;i++,printf("step\n")) printf("i=%d\n",i);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Но кроме использования их в блоках инициализации и проверки - не вижу смысла использовать функции в блоке шага, уж лучше перенести в блок за &lt;strong&gt;for&lt;/strong&gt;, либо использовать....&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;strong&gt;while&lt;/strong&gt; - пока&lt;/h4&gt;&lt;br /&gt;Цикл &lt;strong&gt;while&lt;/strong&gt; - чаще используют если количество иттераций заранее не известно.&lt;br /&gt;&lt;br /&gt;Синтаксис:&lt;br /&gt;&lt;strong&gt;while&lt;/strong&gt; (&lt;em&gt;условие&lt;/em&gt;) {...}&lt;br /&gt;Блок за &lt;strong&gt;while&lt;/strong&gt; будет выполнятся пока условие = &lt;em&gt;true&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Если условие изначально &lt;em&gt;false&lt;/em&gt; то блок не будет выполнятся вообще, если это необходимо используют более редкую конструкцию &lt;strong&gt;while&lt;/strong&gt; с &lt;strong&gt;do&lt;/strong&gt;&lt;br /&gt;Синтаксис:&lt;br /&gt;&lt;strong&gt;do&lt;/strong&gt; {...} &lt;strong&gt;while&lt;/strong&gt;(&lt;em&gt;условие&lt;/em&gt;);&lt;br /&gt;Блок do-while выполнится один раз как минимум и будет выполнятся пока &lt;em&gt;условие&lt;/em&gt; = &lt;em&gt;true&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для изменения работы циклов (&lt;strong&gt;for&lt;/strong&gt; и &lt;strong&gt;while&lt;/strong&gt;) - есть ключевые слова &lt;strong&gt;break&lt;/strong&gt; и &lt;strong&gt;continue&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;break - сломать&lt;/h4&gt;&lt;br /&gt;Цикл прерывается и выполняется слелующий операнд за циклом&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;continue - продолжить&lt;/h4&gt;&lt;br /&gt;Цикл принудительно переходит на блок проверки условия, однако у &lt;strong&gt;for&lt;/strong&gt; - выполняется блок шага&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Еще про проверки условий&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Еще для более удобного представления множественной проверки условий используют конструкцию &lt;strong&gt;switch&lt;/strong&gt; - переключатель&lt;br /&gt;Синтаксис:&lt;br /&gt;switch(&lt;em&gt;выражение&lt;/em&gt;)&lt;br /&gt;{&lt;br /&gt;case &lt;em&gt;значение1&lt;/em&gt;:&lt;br /&gt; ...&lt;br /&gt; break;&lt;br /&gt;case &lt;em&gt;значение2&lt;/em&gt;:&lt;br /&gt; ...&lt;br /&gt; break;&lt;br /&gt;default:&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;в условиях стоит выражение, значение которого проверяется в каждом case и если оно совпадает с одним из &lt;em&gt;значением&lt;/em&gt; то выполняется операнды под этим &lt;strong&gt;case&lt;/strong&gt;.&lt;br /&gt;Внимание, если не будет стоят &lt;strong&gt;break&lt;/strong&gt; то затем будут выполнятся все другие условия, под другими case, которые описаны дальше.&lt;br /&gt;&lt;br /&gt;Блок &lt;strong&gt;default&lt;/strong&gt; выполняется как глобальный else - если не один case не подошел.&lt;br /&gt;&lt;br /&gt;Иногда специально не ставят &lt;strong&gt;break&lt;/strong&gt; для выполнение какого-то кода.&lt;br /&gt;Вообще &lt;strong&gt;switch&lt;/strong&gt; как и циклы - это все проверки условия (&lt;strong&gt;if&lt;/strong&gt;) и переходы на строку (&lt;strong&gt;goto&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;Однако  использовать &lt;strong&gt;goto&lt;/strong&gt; - некомильфо и презирается гуру.&lt;br /&gt;Однако если у вас вложенный тройной цикл - то плюйте на гуру и пишите &lt;strong&gt;goto&lt;/strong&gt;, между прочим в коде под &lt;strong&gt;Linux&lt;/strong&gt; для обработки изображений jpeg используется &lt;strong&gt;goto&lt;/strong&gt;, так что - вообще нежелательно - но если очень хочется - то можно.&lt;br /&gt;&lt;br /&gt;&lt;div style='border: #0000ee solid 2px;'&gt;&lt;a href="http://feeds.feedburner.com/prog-student"&gt;Подпишись на обновления блога&lt;/a&gt; - будь в курсе&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-363747470776414320?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/363747470776414320/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/12/blog-post_20.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/363747470776414320" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/363747470776414320" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/12/blog-post_20.html" title="Циклы и условия" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-7649722710558549176</id><published>2010-12-09T06:05:00.000-08:00</published><updated>2010-12-10T04:05:01.681-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="утилита" /><category scheme="http://www.blogger.com/atom/ns#" term="chendex" /><title type="text">Какие страницы не в индексе ПС?</title><content type="html">Задался тут вопросом и написал небольшую &lt;a href="http://prog-student.blogspot.com/p/chendx.html"&gt;утилиту для определения страниц не в индексе ПС&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Работаю программистом, а потому отдавать за просто так жаль.&lt;br /&gt;Отдам на тесты первым трем комментаторам к этой записи (укажите на какую почту скинуть ключ) [&lt;font color=red size+1&gt;УЖЕ ЗАВЕРШЕНО&lt;/font&gt;] и тому кто скажет &lt;font color="#ee1111"&gt;красную цену&lt;/font&gt; и сможет ее  аргументировать.&lt;br /&gt;&lt;br /&gt;Думаю некоторым &lt;a href="http://topsape.ru"&gt;саперам&lt;/a&gt; будет интересна.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a rel="nofollow" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CoC8hctS7ks/TQDxu8m0yfI/AAAAAAAAAF0/Zd9MGEla5So/s1600/scr1.jpg"&gt;&lt;img style="float:center; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 258px;" src="http://2.bp.blogspot.com/_CoC8hctS7ks/TQDxu8m0yfI/AAAAAAAAAF0/Zd9MGEla5So/s400/scr1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5548700529765698034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-7649722710558549176?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/7649722710558549176/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/12/blog-post.html#comment-form" title="Комментарии: 10" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7649722710558549176" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7649722710558549176" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/12/blog-post.html" title="Какие страницы не в индексе ПС?" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_CoC8hctS7ks/TQDxu8m0yfI/AAAAAAAAAF0/Zd9MGEla5So/s72-c/scr1.jpg" height="72" width="72" /><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-933612133433953464</id><published>2010-11-29T07:40:00.000-08:00</published><updated>2010-11-29T07:48:34.186-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="уроки" /><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Си" /><title type="text">Указатели, функции и указатели на функции (С, Си)</title><content type="html">Итак, в &lt;a href="http://prog-student.blogspot.com/2010/11/blog-post_22.html"&gt;уроке №2&lt;/a&gt; мы разобрали какие бывают переменные и как они хранят свое содержимое.&lt;br /&gt;&lt;strong&gt;Всё в мире байты&lt;/strong&gt; - это как эпиграф.&lt;br /&gt;&lt;br /&gt;А байты хранятся в памяти, в виде цепочки - друг-за-другом, чтобы узнать где именно - можно получить указатель на адрес переменной.&lt;br /&gt;&lt;blockquote&gt;Вообще разница между адресами и указателями очень тонка, и отличия возникают все же больше в C++, нежели в простом C. Но об этом позже&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;В языке C, получить адрес переменной - знак амперсанда - &lt;a href="http://prog-student.blogspot.com/"&gt;&amp;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Допустим:&lt;code&gt;int a=5;int *b=&amp;a;&lt;/code&gt;&lt;br /&gt;Переменная b - на самом деле указатель на целочисленный тип (int). Чтобы точнее это понять стоит писать &lt;em&gt;int* b&lt;/em&gt;, но все пишут (и я тоже) как &lt;em&gt;int *b&lt;/em&gt;, потому что в пробелы и их отсутствие - это не суть.&lt;br /&gt;&lt;br /&gt;Так вот, переменная b указывает на адрес памяти переменной a или если кратко - b указатель на a.&lt;br /&gt;Для понимания можно выполнить следующий код &lt;code&gt;*b = 6;&lt;/code&gt;, звездочка перед b означает действие разыменование, и реально &lt;strong&gt;именно переменная a станет равной 6!&lt;/strong&gt;&lt;br /&gt;Если же выполнить конструкцию просто &lt;code&gt;b = 6;&lt;/code&gt; то в результате переменная &lt;strong&gt;b&lt;/strong&gt; будет содержать на область памяти с смещением 6. Само по себе это ничего не даст (и ошибок тоже), но если после этого сделать &lt;strong&gt;*b = 6;&lt;/strong&gt; 99% что ваша программа закроется с ошибкой. Потому что вы меняете значения памяти не глядя, а там может располагаться исполняемые код или другие данные. &lt;br /&gt;&lt;br /&gt;Это тоже одна из плавающих ошибок, которую трудно найти.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Функции&lt;/h3&gt;&lt;br /&gt;Функции это самостоятельный код, который объеденен в группу - функцию.&lt;br /&gt;Функция может принимать любое количество, любых типов переменных и возвращать любой тип переменных. А может и не возвращать - в некоторых языках делят на функции и процедуры - мол процедуры не возвращают ничего, в C - функции могут возвращать тип void - ничего/пусто.&lt;br /&gt;&lt;br /&gt;Синтаксис очень просто перед именем функции пишут тип возвращаемых данных, например int, затем имя функции, а в круглых скобках перечисления через запятую типы аргументов и их имена.&lt;br /&gt;Например &lt;code&gt;int my_func(int a,int b,double num)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Тело функции пишутся после объявления функции в фигурных скобках, например&lt;br /&gt;&lt;code&gt;int my_func(int a,int b,double num)&lt;br /&gt;{&lt;br /&gt;int c = a + b;&lt;br /&gt;c = c + (int)num;&lt;br /&gt;return c;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Ключевое слово &lt;em&gt;return&lt;/em&gt; говорит что в данном месте нужно прекратить выполнение функции и вернуть значение, которое у него указано (в примере - переменная &lt;em&gt;c&lt;/em&gt;).&lt;br /&gt;Если функция типа &lt;em&gt;void&lt;/em&gt; - то можно конструкция упрощается просто &lt;em&gt;return;&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Теперь про большие проекты, функции используются еще для того чтобы разнести код по его смыслу на разные модули.&lt;br /&gt;Чтобы в другом файле(модуле) использовать функцию другого файла(модуля) нужно написать(указать) ее прототип.&lt;br /&gt;&lt;br /&gt;Например в нашем случае &lt;code&gt;int my_func(int a,int b,double num);&lt;/code&gt; - описания прототипа заканчивается точкой запятой, а описание функции - телом функции в фигурных скобках.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;В прототипе функции(описании) можно не указывать названия переменных или (если хочется) писать любые имена - все равно комплиятор их не смотрит&lt;/blockquote&gt;&lt;br /&gt;&lt;code&gt;int my_func(int,int,double);&lt;/code&gt; - это тоже прототип функции.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Забегая вперед скажу, что в C++ можно не указывать имя переменной и в описания функции - это означает, что в данной функции вы не используете эту переменную, а ее синтаксис сохранен для совпадения с чем-то. В этом случае компилятор не выдает предупреждение(warning) &lt;em&gt;Parameter 'a' is never used in function&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;Допустим мы в функции &lt;em&gt;my_func&lt;/em&gt; изменем содержание переменной a, например &lt;code&gt;a = 5;&lt;/code&gt;, то в сама переменная указаная в функции при вызове - &lt;strong&gt;не изменится&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Например:&lt;br /&gt;&lt;code&gt;int my_func(int a,int b,double num)&lt;br /&gt;{&lt;br /&gt;a = 6;&lt;br /&gt;int c = a + b;&lt;br /&gt;return c + (int)num;&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int i=5,j=6,n;&lt;br /&gt;double k=1;&lt;br /&gt;n=my_func(i,j,k);&lt;br /&gt;printf("n=%d, i=%d\n",n,i);&lt;br /&gt;}&lt;/code&gt; Выдаст &lt;em&gt;n=13, i=5&lt;/em&gt;, потому что &lt;strong&gt;в функцию передаются значения переменных, а не их адреса&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Чтобы изменять значения переменной нужно в описании функции указывать не просто переменную, а указатель на нее.&lt;br /&gt;&lt;code&gt;void my_func2(int *a,int b)  &lt;br /&gt;{&lt;br /&gt;*a = b + 5;&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int i=5,j=6;&lt;br /&gt;my_func2(&amp;i,j);&lt;br /&gt;printf("i=%d\n",i);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Код вернет &lt;em&gt;i=11&lt;/em&gt;, т.к. в функции мы используем указатель на переменную, и пусть она называется не так как в основной функции (там i, а в myfunc2 - a) - имена не играют никакой роли, все равно в область памяти переменной указанной в качестве первого аргумента, будет записано значение переменной второго аргумента + 5.&lt;br /&gt;&lt;br /&gt;С переменными более, менее ясно - теперь - как передавать массивы, в частности строки?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Допустим мы хотим написать функцию, которая будет определять сколько букв 'а', в заданной фразе.&lt;br /&gt;Нам нужно передать в функцию строку - массив символов, так как это сделать?&lt;br /&gt;Очень просто, в описании функции нужно написать, что ожидается указатель на элемент массива (в нашем случае - символ).&lt;br /&gt;Например: &lt;code&gt;int getSymA(char *src);&lt;/code&gt;&lt;br /&gt;В функции, чтобы получить элемент массива, можно также просто писать str[1] или *(str+1) - это два идентичных кода вернут второй символ в строке.&lt;br /&gt;&lt;br /&gt;В целом наша функция будет выглядеть так:&lt;br /&gt;&lt;code&gt;int getSymA(char *src)&lt;br /&gt;{&lt;br /&gt;int i,n=0;&lt;br /&gt;for(i=0;src[i];i++)&lt;br /&gt;{&lt;br /&gt; if (src[i]=='а') n++;&lt;br /&gt;}&lt;br /&gt;return n;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;кстати, фигурные скобки после циклов, если код состоит из одной строки можно не указывать, например:&lt;br /&gt;&lt;code&gt;int getSymA(char *src)&lt;br /&gt;{&lt;br /&gt;int i,n=0;&lt;br /&gt;for(i=0;src[i];i++)&lt;br /&gt; if (src[i]=='а') n++;&lt;br /&gt;return n;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;или вообще не использовать лишние переменные:&lt;br /&gt;&lt;code&gt;int getSymA(char *src)&lt;br /&gt;{&lt;br /&gt;int n=0;&lt;br /&gt;for(;*src;src++)&lt;br /&gt; if (*src=='а') n++;&lt;br /&gt;return n;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Это как эволюция понимания, потому рассмотрим последний код построчно.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Первая строка - говорим что нужно создать переменную n и инициализировать ее нулем.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Вторая строка - цикл &lt;em&gt;for&lt;/em&gt; - пропускаем блок инициализации (первый после круглой скобки) сразу ставим точку с запятой, второй блок - условия - в нем проверяем является ли указатель на символ 0 - пустым символом, означающим конец строки, третий блок перемещаем указатель в памяти (указатель, а не его значение)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Третья строка - проверяем, а текущий указатель указывает на букву А? Если так увеличиваем счетчик n на один, если нет - то ничего не делаем (нет блока else)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Сделаем вызов, скажем следующего кода:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;char s[10]="Hello!";&lt;br /&gt;printf("%d\n",getSymA(s));&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Первое - при передаче массива, не надо указывать его адрес - нужно указывать саму переменную, т.к. она и есть уже указатель на переменную.&lt;br /&gt;Второе -&lt;br /&gt;АААА! Мы изменяли указатель! Программа сломается и нельзя использовать переменную дальше! - Вовсе нет, мы передали указатель, который может менять значение переменной, но мы его не модифицировали, а просто изменяли его адрес.&lt;br /&gt;Чтобы модифицировать сам указатель нужно использовать указатель на указатель :)&lt;br /&gt;&lt;br /&gt;Код:&lt;br /&gt;&lt;code&gt;void hhh(int **a,int *b)&lt;br /&gt;{&lt;br /&gt;*a = b;&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int i=5,j=6,*n=&amp;i;&lt;br /&gt;hhh(&amp;n,&amp;j);&lt;br /&gt;printf("i=%d,j=%d,n=%d\n",i,j,*n);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;результат: &lt;em&gt;i=5,j=6,n=6&lt;/em&gt;, в функцию мы передали указатель на указатель переменной i, но в самой функции сказали, что теперь он равен указателю на переменную b.&lt;br /&gt;Сами переменные (i и j) не изменились, а вот указатель n, ранее указывающий на i, стал указывать на переменную j.&lt;br /&gt;&lt;br /&gt;И отвечая на ваш вопрос скажу - &lt;strong&gt;ДА! Есть указатели на указатели указателей, особенно это любит использовать корпорация Microsoft&lt;/strong&gt;&lt;br /&gt;Но в реальной жизни, хватает и указателей на указатели. А некоторым и просто указателей.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Указатели на функции&lt;/h3&gt;&lt;br /&gt;Раз в функции можно передать указатель на область памяти, то почему не передать на ту область где находится функция?&lt;br /&gt;Конечно можно и не так сложно, код:&lt;br /&gt;&lt;code&gt;#include &lt;stdio.h&gt;&lt;br /&gt;int pw(int n,int t)&lt;br /&gt;{&lt;br /&gt;int i,r=1;&lt;br /&gt;&lt;br /&gt;for(i=0;i&amp;gt;t;i++)&lt;br /&gt; r*=n; &lt;br /&gt;return r;&lt;br /&gt;}&lt;br /&gt;int hhh(int (nn(int,int)),int z)&lt;br /&gt;{&lt;br /&gt;return nn(z,2);&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;printf("%d\n",hhh(pw,3));&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Вызываем функцию hhh, передавая ей в качестве аргументов адрес на функцию и число.&lt;br /&gt;В функции hhh вызываем функцию указанную в качестве параметра и получаем в результате цифру 9.&lt;br /&gt;&lt;br /&gt;Для сложных функций, передаваемых в качестве параметра, лучше использовать заменитель &lt;strong&gt;typedef&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;typedef int (*load_func)(int,int);&lt;br /&gt;int hh(load_func f,int z)&lt;br /&gt;{&lt;br /&gt;if (f) return f(z,2);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;printf("%d\n",hhh(&amp;pw,3));&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style='border: #0000ee solid 2px;'&gt;&lt;a href="http://feeds.feedburner.com/prog-student"&gt;Подпишись на обновления блога&lt;/a&gt; - будь в курсе&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-933612133433953464?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/933612133433953464/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/11/blog-post_29.html#comment-form" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/933612133433953464" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/933612133433953464" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/11/blog-post_29.html" title="Указатели, функции и указатели на функции (С, Си)" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-7522890846094481359</id><published>2010-11-22T04:47:00.000-08:00</published><updated>2010-11-24T22:04:36.565-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="уроки" /><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Си" /><title type="text">Второй урок - Типы переменных. (С, Си)</title><content type="html">Данный урок, продолжение &lt;a href="http://prog-student.blogspot.com/2010/11/hello-world-c.html"&gt;первого урока&lt;/a&gt;.&lt;br /&gt;Раберем типы переменных в C.&lt;br /&gt;Их не много, это символ, он же байт  - &lt;em&gt;char&lt;/em&gt; принимает значения от 0..255 (или -127 .. +127)&lt;br /&gt;Целочисленное - &lt;em&gt;int&lt;/em&gt; - значения целые числа&lt;br /&gt;С плавающей точкой - &lt;em&gt;float&lt;/em&gt;&lt;br /&gt;С двойной точностью - &lt;em&gt;double&lt;/em&gt;&lt;br /&gt;Тип данных &lt;em&gt;float&lt;/em&gt; практически не используется в современном программировании.&lt;br /&gt;&lt;br /&gt;Существуют несколько префиксов к типам данных, например знаковость это &lt;em&gt;signed&lt;/em&gt; и &lt;em&gt;unsgined&lt;/em&gt;.&lt;br /&gt;По умолчанию переменные знаковые (signed), хотя такая запись не будет ошибочной &lt;code&gt;signed int a&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В чем различия? В диапазоне принимаемых значений в случае знака это от - до +, в беззнаковом случае(unsigned) от 0 до максимального значения.&lt;br /&gt;&lt;br /&gt;Максимальное значение для char это 255 (емкость - 2&lt;sup&gt;8&lt;/sup&gt;) , а для int (емкость 2&lt;sup&gt;32&lt;/sup&gt;) - в 32 битных системах, в 64 - соотвественно 2&lt;sup&gt;64&lt;/sup&gt;, а я помню еще времена когда в int можно было загнать только до 2&lt;sup&gt;16&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;Размер памяти выделяемый для каждой переменной, естественно кратный ее максимальному значению (или наоборот - тут спор как про яйцо и курицу), для char - 1 байт, для int (32) - 4 байта.&lt;br /&gt;&lt;br /&gt;Для float - 4 байта, для double - 8 байт.&lt;br /&gt;&lt;br /&gt;Также есть префиксы изменяющие размер данных - это &lt;em&gt;short&lt;/em&gt; и &lt;em&gt;long&lt;/em&gt;&lt;br /&gt;Но не все варианты возможны, скажем для &lt;em&gt;char&lt;/em&gt; и &lt;em&gt;float&lt;/em&gt; нельзя указывать такой префикс.&lt;br /&gt;Можно только для int и double. Т.к. long float это и есть double, а long char - это наверное int.&lt;br /&gt;&lt;br /&gt;Так вот &lt;em&gt;short int&lt;/em&gt; - это слово (два байта), т.е. максимальное значение 2&lt;sup&gt;16&lt;/sup&gt;&lt;br /&gt;Для &lt;em&gt;long int&lt;/em&gt; в bcc и gcc - размер равен что и просто &lt;em&gt;int&lt;/em&gt; - двойное слово (четыре байта).&lt;br /&gt;Однако для некоторых компиляторов - &lt;em&gt;long int&lt;/em&gt; это int64 - 8 байт.&lt;br /&gt;&lt;br /&gt;Вариантам &lt;em&gt;short double&lt;/em&gt; тоже несуществует, однако есть &lt;em&gt;long double&lt;/em&gt;.&lt;br /&gt;Кстати в разных компиляторах это разные размеры данных. В bcc - 10 байт, а в gcc - 12 байт (на 32битной платформе).&lt;br /&gt;&lt;br /&gt;По поводу signed/unsigned - тут стоит заметить что переполнение емкости данных, ведет к разным значениям в зависимости от signed.&lt;br /&gt;Например &lt;code&gt;unsined char a =  255; a+=2&lt;/code&gt;, "a" будет равна 1.  А &lt;code&gt;char a =  127; a+=2&lt;/code&gt;, "a" будет равна -127.&lt;br /&gt;&lt;br /&gt;Эта нехитрая ошибка приводит к большому количеству багов и глюков множества программ.&lt;br /&gt;&lt;br /&gt;А как же строки, спросит тот редкий читатель, что увидел этот текст.&lt;br /&gt;Все просто - строка это массив символов. Размерность массива указывается в квадратных скобках после имени переменной&lt;br /&gt;Например &lt;code&gt;int a[50];&lt;/code&gt; - целочисленный массив, с 50 элементами. Для доступа к конкретному элементу в квадратных скобках указывается его индекс &lt;code&gt;int b= a[5];&lt;/code&gt;.&lt;br /&gt;Массивы можно инициализировать сразу при описании, например &lt;code&gt;int a[5] = {1,2,3};&lt;/code&gt;, значения указывается через запятую в фигурных скобках. Значений может быть меньше чем размерность массива, но не больше!&lt;br /&gt;&lt;br /&gt;Также и строки &lt;code&gt;char str[10] = {'H','e','l','l','o','!',\0};&lt;/code&gt;. &lt;br /&gt;Символы указывается в апострофах, и в ковычках может быть только один символ. &lt;code&gt;char a='aa';//ошибка!!!&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Но гораздо легче и проще инициализировать строки (а также использовать их для других целей) через строку заключенную в двойные кавычки &lt;code&gt;char str[10] = "Hello!";&lt;/code&gt;.&lt;br /&gt;Следует заметить, что 0-символ ставится автоматически. &lt;br /&gt;Т.е. &lt;code&gt;char str[6]="Hello!";&lt;/code&gt; - не сработает, скажет что размер массива меньше чем количество инициализируемых элементов.&lt;br /&gt;Т.е.  &lt;em&gt;"Hello!"&lt;/em&gt; автоматически преобразуется в &lt;em&gt;{'H','e','l','l','o','!',\0}&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style='border: #0000ee solid 2px;'&gt;&lt;a href="http://feeds.feedburner.com/prog-student"&gt;Подпишись на обновления блога&lt;/a&gt; - будь в курсе&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-7522890846094481359?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/7522890846094481359/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/11/blog-post_22.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7522890846094481359" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7522890846094481359" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/11/blog-post_22.html" title="Второй урок - Типы переменных. (С, Си)" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-538330336707096554</id><published>2010-11-16T02:23:00.000-08:00</published><updated>2010-11-16T02:31:07.246-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="уроки" /><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Си" /><title type="text">Первый урок - Hello world на C(си)</title><content type="html">В языке C очень малый набор ключевых слов, т.к. только несколько типов переменных, слова управления циклами и функциями.&lt;br /&gt;Еше необходимо заметить, что C язык компилируемый, т.е. для его выполнения необходимо его скопилировать - преобразовать из текста языка в машинный код.&lt;br /&gt;&lt;br /&gt;При выполнении программы, написаной на C необходимо описать главную функцию &lt;em&gt;main&lt;/em&gt;, которая и будет вызываться при запуске.&lt;br /&gt;Функция &lt;em&gt; main&lt;/em&gt; является такой-же обычной функцией как и все остальные, в целом у нее есть &lt;strike&gt;два&lt;/strike&gt; несколько прототипов описания.&lt;br /&gt;&lt;code&gt;void main()&lt;/code&gt;, &lt;code&gt;int main()&lt;/code&gt;, &lt;code&gt;int main(int,char **)&lt;/code&gt; и &lt;code&gt;void main(int,char **)&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Первое слово перед &lt;em&gt;main&lt;/em&gt; это тип функции - тип значения которое она может веруть &lt;em&gt;int&lt;/em&gt; - целочисленное число, &lt;em&gt;void&lt;/em&gt; (пусто) ничего.&lt;br /&gt;Затем идет имя функции (в нашем случае &lt;em&gt;main&lt;/em&gt;), а далее в круглых скобках - принимаемые параметры, также сначала тип, а затем название переменной.&lt;br /&gt;Причем как в описании, так и в самой функции названия могут отсутствовать.&lt;br /&gt;&lt;blockquote&gt;Отсутствие название переменных и для чего это - обсудим потом&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Тут нужно учесть, что компилятор &lt;strong&gt;gcc&lt;/strong&gt; считает что функция main должна обязательно иметь тип &lt;em&gt;int&lt;/em&gt;, для того чтобы вернуть код выполнения программы, а вот скажем &lt;strong&gt;bcc&lt;/strong&gt; от Borland допускает и тип &lt;em&gt;void&lt;/em&gt;, хотя в этом случае на самом деле возвращает 0.&lt;br /&gt;Чтобы поддерживать общие стандарты лучше описывать функцию &lt;em&gt;main&lt;/em&gt; все-же через тип &lt;em&gt;int&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Функция &lt;em&gt;main&lt;/em&gt; отличается от других библиотечных функций тем, что она противоположная по смыслу, в остальных функциях вы знаете их прототип для вызова, но не знаете/видете код функции, а для &lt;em&gt;main&lt;/em&gt; все как раз наоброт - компилятор знает ее описание, но вот код - должны написать вы.&lt;br /&gt;&lt;br /&gt;И так самый примитивный &lt;u&gt;рабочий&lt;/u&gt; код на C!&lt;br /&gt;&lt;code&gt;int main()&lt;br /&gt;{&lt;br /&gt;return 0;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Данный код можно скомпилировать в программу и даже выполнить - правда, он ничего не выполнит, потому как единственная строка кода в нем &lt;code&gt;return 0;&lt;/code&gt; - выйти из функции и вернуть значение 0.&lt;br /&gt;&lt;blockquote&gt;Ну да в C - разделитель комманд точка с запятой ';'&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Для того. чтобы что-нибудь вывести на экран нужно вызвать функцию для вывода, впрочем большинство стандартных функций уже давно написаны. Например для вывода на экран(консоль) есть специальная библиотека &lt;em&gt;stdio&lt;/em&gt;, которая содержит тьму функций.&lt;br /&gt;Но нам интересна пока только одна - &lt;code&gt;printf&lt;/code&gt; - форматированный вывод на экран.&lt;br /&gt;Чтобы подключить библиотеку нужно указать директиву include с указанием имени библиотеки, имя библиотеки можно написать в угловых скобках (тогда компилятор библиотеку будет искать в стандартной папке, либо в двойных ковычках тогда он сначала ищет в текущем каталоге, а потом в стандартом)&lt;br /&gt;Все директивы - это команды к препроцессору, т.е. процессу вызываемому до компиляции, это облегчает жизнь программистам, в противном случае им пришлось бы самим писать все прототипы функций вручную.&lt;br /&gt;&lt;blockquote&gt;Ну и директивы пишутся через знак #, всего их не очень много основные: include, define, ifdef, else, error&lt;/blockquote&gt;&lt;br /&gt;Для нашего примера это &lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/code&gt; - т.е. включить заголовки(описания прототипов) от библиотеки stdio (расширение .h - как раз указывает что это заголовки &lt;em&gt;от англ. header&lt;/em&gt;)&lt;br /&gt;&lt;br /&gt;Функция &lt;em&gt;printf&lt;/em&gt; поддерживает множество аргуметов, но пока нас интересует только первый - а именно базовая строка, которая будет выводится на экран.&lt;br /&gt;Cамый примитивный &lt;u&gt;рабочий&lt;/u&gt; код на C  с выводом на экран!&lt;br /&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;printf("Hello, World!\n");&lt;br /&gt;return 0;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Т.к. в качестве первого аргумента функции &lt;em&gt;printf&lt;/em&gt; является строка, то приходится &lt;strong&gt;квотировать&lt;/strong&gt; некоторые символы, например \n - означает перевод строки, а \" - двойную кавычку&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Теперь скомпилировав и выполнив это программу, увидем на экране &lt;em&gt;Hello, World&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Если, вы конечно, запускаете ее из консоли (в винде через cmd), а в линуксе через терминал.&lt;br /&gt;&lt;br /&gt;Ну и чтобы скомпилировать программу - команда &lt;em&gt;gcc hello.c -ohello.exe&lt;/em&gt; - это если у вас gcc&lt;br /&gt;&lt;br /&gt;&lt;div style='border: #0000ee solid 2px;'&gt;&lt;a href="http://feeds.feedburner.com/prog-student"&gt;Подпишись на обновления блога&lt;/a&gt; - будь в курсе&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-538330336707096554?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/538330336707096554/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/11/hello-world-c.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/538330336707096554" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/538330336707096554" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/11/hello-world-c.html" title="Первый урок - Hello world на C(си)" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-7195428974768258282</id><published>2010-11-15T05:48:00.000-08:00</published><updated>2010-11-15T05:50:31.435-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="блоги" /><title type="text">Подумал  тут</title><content type="html">И решил сделаю я курс обучения C/C++ (сначала основы, а потом классы и полиморфизм ;) )&lt;br /&gt;Я все потому, что прочитал я в блоге Шелвина, что это интересует массы.&lt;br /&gt;&lt;br /&gt;А прочитал я блог, потому что автор устраивает &lt;a href="http://shelvin.ru/marafon-stat-tysyachnikom-za-60-dnej"&gt;марафон на 60 дней&lt;/a&gt; для набора подписчиков.&lt;br /&gt;Обещает горячие темы и жаркие посты, так что думаю можно и подписаться.&lt;br /&gt;&lt;br /&gt;УТКИ НА СТАРТ!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-7195428974768258282?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/7195428974768258282/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/11/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7195428974768258282" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7195428974768258282" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/11/blog-post.html" title="Подумал  тут" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-1343738582581611305</id><published>2010-11-11T08:34:00.000-08:00</published><updated>2010-11-11T08:48:01.136-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="yandex" /><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><category scheme="http://www.blogger.com/atom/ns#" term="код" /><category scheme="http://www.blogger.com/atom/ns#" term="косяк" /><title type="text">Авторизация на ya.ru (через passport.yandex.ru)</title><content type="html">Попросили меня (за практически спасибо) написать модуль для авторизации и постинга постов на ярушку (ya.ru).&lt;br /&gt;&lt;br /&gt;Быстренько накидал через свои компоненты, а что сложного-то? GET my.ya.ru далее получаем форму для авторизации через passport.yandex.ru заполняем поля и далее через n редиректов в идеале попадаем на my.ya.ru уже авторизованными.&lt;br /&gt;&lt;br /&gt;В чем сложность №1. Понятно что авторизация не совсем обычная (не через тривиальные куки) - и понятно что яндекс(домен)  свои куки не отдает даже домену ya.ru.&lt;br /&gt;&lt;br /&gt;Первый и быстро написаный код не работал - вернее он явно авторизовал на passport.yandex.ru (видно было по выдаче), но на my.ya.ru был редирект без кук и сессий.&lt;br /&gt;&lt;br /&gt;Ломал над этим голову долго, причем этот код замечательно работал для mail.yandex.ru и webmaster.yandex.ru - на это и понятно - это один и тот-же домен.&lt;br /&gt;&lt;br /&gt;Перебрал все, установил сниффер - вижу что при первичной загрузке my.ya.ru в браузере срабатывает редирерт, на my.ya.ru/pass где получают куки и возвращают опять же редиректом на my.ya.ru.&lt;br /&gt;С точки зрения пользователя ничего не происходит он вбивает my.ya.ru и видит страницу авторизации.&lt;br /&gt;&lt;br /&gt;Но в моем случае этого не было! Было просто загрузка формы логина, без редиректа и без принятия кук.&lt;br /&gt;&lt;br /&gt;Оказалось что я не передавал в хедере HTTP тэг accept = html/text и прочее.&lt;br /&gt;И именно из-за этого my.ya.ru не делал редирект и не подсовывал кук.&lt;br /&gt;Как только начал указывать - все получилось.&lt;br /&gt;&lt;br /&gt;В кратце:&lt;br /&gt;GET my.ya.ru -&gt; my.ya.ru/pass -&gt; my.ya.ru&lt;br /&gt;Заполняем форму&lt;br /&gt;POST passport.ya.ru -&gt; ... -&gt; pass.yandex.ru -&gt; my.ya.ru -&gt; pass.yandex.ru -&gt; my.ya.ru&lt;br /&gt;Мы авторизованы! (В предпоследнем ya.ru передается сессия, а в последнем уже авторизованные куки для ya.ru)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-1343738582581611305?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/1343738582581611305/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/11/yaru-passportyandexru.html#comment-form" title="Комментарии: 5" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1343738582581611305" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1343738582581611305" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/11/yaru-passportyandexru.html" title="Авторизация на ya.ru (через passport.yandex.ru)" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-5125511423110565655</id><published>2010-10-29T01:21:00.000-07:00</published><updated>2010-10-29T01:27:50.440-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="работа" /><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><title type="text">Непростая сортировка.</title><content type="html">Иногда нужно отсортировать данные как числа, но сами данные не совсем числа, а сборная солянка из цифр и букв&lt;br /&gt;&lt;br /&gt;Допустим у вас есть такие данные: 90A,89B,90C,102A,89A ;) их нужно отсортировать по возрастанию - на самом деле - код очень простой:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;use Data::Dumper;&lt;br /&gt;&lt;br /&gt;sub exsortproc  &lt;br /&gt;{  &lt;br /&gt;return $a&amp;lt;=&amp;gt;$b if ($a != $b) ;&lt;br /&gt;return $a cmp $b;&lt;br /&gt;};  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my @data=('90A','89B','90C','102A','89A');&lt;br /&gt;my @out;&lt;br /&gt;@out = sort exsortproc @data;&lt;br /&gt;&lt;br /&gt;die Dumper(\@out);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Output:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;$VAR1 = [&lt;br /&gt;          '89A',&lt;br /&gt;          '89B',&lt;br /&gt;          '90A',&lt;br /&gt;          '90C',&lt;br /&gt;          '102A'&lt;br /&gt;        ];&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Все дело в том что если нужно перл кастует скаляр '90A' к числу 90.&lt;br /&gt;&lt;br /&gt;Успехов вам и побольше 90C :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-5125511423110565655?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/5125511423110565655/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/10/blog-post_29.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/5125511423110565655" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/5125511423110565655" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/10/blog-post_29.html" title="Непростая сортировка." /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-7374893026570464381</id><published>2010-10-16T13:48:00.000-07:00</published><updated>2010-10-16T13:50:33.374-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="работа" /><category scheme="http://www.blogger.com/atom/ns#" term="косяк" /><title type="text">Рабочее</title><content type="html">На работе есть вроде внутреннего корпоративного сайта, так вот с недавних пор он стал странно грузиться.&lt;br /&gt;Боковая панель - подгружалось полностью где-то за 15 секунд.&lt;br /&gt;&lt;br /&gt;Искали и нашли причину, в футоре стоял счетчик, сервер который сейчас не доступен, причем ответ что от сервера отрубает именно по таймауту.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-7374893026570464381?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/7374893026570464381/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/10/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7374893026570464381" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/7374893026570464381" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/10/blog-post.html" title="Рабочее" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-4623407430708040651</id><published>2010-10-08T12:20:00.000-07:00</published><updated>2010-10-08T12:30:09.860-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><category scheme="http://www.blogger.com/atom/ns#" term="кал" /><category scheme="http://www.blogger.com/atom/ns#" term="фильм" /><title type="text">Обитель зла 4 vs Блэйд-ХЗ</title><content type="html">Вчера посмотрел &lt;strong&gt;обитель зла&lt;/strong&gt; в &lt;strong&gt;3D&lt;/strong&gt;, пипец хрень полная - начало так вообще подумал от сучки какие, а потом это мнение закрепилось.&lt;br /&gt;&lt;br /&gt;Нет, я не против пары трупов, но ведь хороших когда убивают, значит это - плохой?&lt;br /&gt;&lt;br /&gt;Затем эти новые зомби - пипец, лучшие зомби - это "&lt;strong&gt;рассвет мертвецов&lt;/strong&gt;" а эти - как тетки из СССР в очереди за колбасой - и догонят и загрызут!&lt;br /&gt;&lt;br /&gt;Эти раскрывающие рты и красные глаза у супер-злодея? Это точно не вампиры из &lt;strong&gt;блэйда&lt;/strong&gt;? Чувствуется один и тот-же реквизит.&lt;br /&gt;&lt;br /&gt;Фильм - гавно. Может в три дэ вам было лучше видны сиськи, но все равно это не спасет сюжет&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-4623407430708040651?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/4623407430708040651/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/10/4-vs.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/4623407430708040651" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/4623407430708040651" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/10/4-vs.html" title="Обитель зла 4 vs Блэйд-ХЗ" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-1289676415880747784</id><published>2010-09-27T11:37:00.000-07:00</published><updated>2010-09-27T11:39:41.089-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="работа" /><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><category scheme="http://www.blogger.com/atom/ns#" term="жизнь" /><title type="text">Работа</title><content type="html">Знаете как трудно сосредоточиться на работу, когда лень?&lt;br /&gt;Ищешь кучу причин, посмотреть почту, интернет или даже поиграть в конце-концов.&lt;br /&gt;&lt;br /&gt;Но! &lt;br /&gt;Стоит понимать, что каждый сделанный час работы, приближает тебя (хочется написать к пенсии ;)) к финалу твоей мечты.&lt;br /&gt;&lt;br /&gt;Это и только это заставляет меня работать, когда лень и когда не охота работать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-1289676415880747784?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/1289676415880747784/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/09/blog-post_27.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1289676415880747784" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1289676415880747784" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/09/blog-post_27.html" title="Работа" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-1013048194730937945</id><published>2010-09-23T03:56:00.000-07:00</published><updated>2010-09-23T03:58:07.499-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><category scheme="http://www.blogger.com/atom/ns#" term="жизнь" /><title type="text">Разное мышление</title><content type="html">Вчера еду в лифте, со мной там еще парень и одна девушка.&lt;br /&gt;На этаже 3, внезапно отключается свет.&lt;br /&gt;Я - &lt;span style="font-style:italic;"&gt;ого&lt;/span&gt;&lt;br /&gt;Парень - &lt;span style="font-style:italic;"&gt;ни фига себе&lt;/span&gt;&lt;br /&gt;Девушка - &lt;span style="font-style:italic;"&gt;ой&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-1013048194730937945?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/1013048194730937945/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/09/blog-post_23.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1013048194730937945" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/1013048194730937945" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/09/blog-post_23.html" title="Разное мышление" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-804350089642073991</id><published>2010-09-10T00:15:00.000-07:00</published><updated>2010-09-10T00:19:18.390-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="работа" /><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><title type="text">Не работается</title><content type="html">Последние недели две мне катастрофически не работается. Нет, конечно я делаю механическую работу, которую говорят, но как-то не прет по основному проекту, который я курирую. Для программиста – это наверное хуже всего.&lt;br /&gt;&lt;br /&gt;Пытаюсь разобраться в чем дело и не понимаю. Вроде бы и заинтересованность есть (проект очень интересный) и материальная выгода (так у нас принято) и в этом проекте я нахожусь как бы сбоку от всех и являюсь сам себе руководителем, но все равно работать не прет.&lt;br /&gt;&lt;br /&gt;Наверное лень, а может быть из-за погоды или просто спад умственной активности.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-804350089642073991?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/804350089642073991/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/09/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/804350089642073991" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/804350089642073991" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/09/blog-post.html" title="Не работается" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-930491883661513813</id><published>2010-08-23T09:02:00.000-07:00</published><updated>2010-08-23T09:08:10.382-07:00</updated><title type="text">Линукс</title><content type="html">Вот же трабл!&lt;br /&gt;Есть самописный демон - прихожу сегодня сдох еще в пятницу - все попытки перегрузиться - опять Segmentation Fault&lt;br /&gt;&lt;br /&gt;Дебажу код по-старинке на каждой строке - лог. Вижу выпадает на вызове обработки PNG из libpng5.&lt;br /&gt;&lt;br /&gt;Хрень думаю, и нажимаю в mc на ентом файлике F3 - Segmentation Fault говорит мне mc.&lt;br /&gt;&lt;br /&gt;Хм-хм&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-930491883661513813?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/930491883661513813/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/08/blog-post_23.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/930491883661513813" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/930491883661513813" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/08/blog-post_23.html" title="Линукс" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3132276620877189877.post-296581088898457926</id><published>2010-08-19T04:40:00.001-07:00</published><updated>2010-08-19T04:42:10.164-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="мысли" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title type="text">Лишнее</title><content type="html">Ну зачем в SQL эти лишние частицы BY?&lt;br /&gt;Почему просто нельзя написать:&lt;br /&gt;&lt;code&gt;SELECT one,sum(total) from table &lt;br /&gt;group one&lt;br /&gt;order one&lt;/code&gt;?&lt;br /&gt;Нафига делать это человекоподобность? Лишние байты в дань традиции :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3132276620877189877-296581088898457926?l=prog-student.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://prog-student.blogspot.com/feeds/296581088898457926/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://prog-student.blogspot.com/2010/08/blog-post_19.html#comment-form" title="Комментарии: 6" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/296581088898457926" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3132276620877189877/posts/default/296581088898457926" /><link rel="alternate" type="text/html" href="http://prog-student.blogspot.com/2010/08/blog-post_19.html" title="Лишнее" /><author><name>admin</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total></entry></feed>

