<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=314848&amp;view=findpost&amp;p=2715661</guid>
        <pubDate>Mon, 04 Oct 2010 09:03:48 +0000</pubDate>
        <title>Ошибка при работе с указателями</title>
        <link>https://forum.sources.ru/index.php?showtopic=314848&amp;view=findpost&amp;p=2715661</link>
        <description><![CDATA[klepa83: <strong class='tag-b'>Большой</strong><br>
Действительно всё оказалось достаточно просто и понятно :) Я както и забыл, что массив - это не совсем тоже что и указатель, таким образом проблема действительно решается. Спасибо&#33;]]></description>
        <author>klepa83</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=314848&amp;view=findpost&amp;p=2715655</guid>
        <pubDate>Mon, 04 Oct 2010 08:56:44 +0000</pubDate>
        <title>Ошибка при работе с указателями</title>
        <link>https://forum.sources.ru/index.php?showtopic=314848&amp;view=findpost&amp;p=2715655</link>
        <description><![CDATA[Большой: <strong class='tag-b'>klepa83</strong><br>
Все достаточно просто&#33;<br>
<br>
char *argv2[] = {&quot;hello.exe&quot;, &quot;1&quot;, &quot;2&quot;, &quot;+&quot;};<br>
<br>
В этом случае argv2 это имя массива. Которое не может использоваться в арифметике указателей. Но имя массива в свою очередь может безболезненно сводиться к указателю на указатель.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">char** a = argv2;</div><div class="code_line">++a;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
И вполне себе работать.<br>
Во втором случае <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main(int argc, char *argv[])</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;++argv;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
argv это аргумент функции переданный по значению (т.е мы имеем копию указателя), что фактически означает что это указатель на указатель. и с ним работать вполне можно.<br>
<br>
Конечно можно и так писать <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main(int argc, char **argv)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;++argv;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Но первый вариант предпочтителен т.к. мы видим что в качестве аргумента функции передается массив указателей]]></description>
        <author>Большой</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=314848&amp;view=findpost&amp;p=2715595</guid>
        <pubDate>Mon, 04 Oct 2010 08:00:35 +0000</pubDate>
        <title>Ошибка при работе с указателями</title>
        <link>https://forum.sources.ru/index.php?showtopic=314848&amp;view=findpost&amp;p=2715595</link>
        <description><![CDATA[klepa83: Изучаю книгу Кернингана и Ритчи &quot;Язык программирования С&quot;, при выполнении упражнения возник вопрос. Не могу понять почему при компиляции возникает ошибка в коде:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main()</div><div class="code_line">{ </div><div class="code_line">&nbsp;&nbsp; &nbsp;int argc2 = 4;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char *argv2[] = {&quot;hello.exe&quot;, &quot;1&quot;, &quot;2&quot;, &quot;+&quot;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;++argv2; //error C2105: для &quot;++&quot; требуется левостороннее значение</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
В нижепреведённом коде ошибки не возникает:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main(int argc, char *argv[])</div><div class="code_line">{ </div><div class="code_line">&nbsp;&nbsp; &nbsp;++argv;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Никак немогу понять в чём разница и почему один код работает, а другой - нет.<br>
<br>
Компилирую в Microsoft Visual Studio 2008. В свойствах проекта указано &quot;Компилировать как код С&quot;]]></description>
        <author>klepa83</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	