<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: изменить адреса указателя при вызове функции</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html</link>
    <description>Здравствуйте! &lt;br&gt;&lt;br&gt;При вызове функции funcx(int *ptr_xxx) в нее передаю указатель, нужно знать точно при этом действии функция получает именно адрес внешнего указателя и создает еще один, правда локальный указатель внутри себя, или же локальный указатель с тем же адресом не создается, а расширяется область видимости внешнего? &lt;br&gt;&lt;br&gt;Интуитивно думал, что будет расширятся область видимости внешнего указателя, чтобы не тратить время на создание нового локального, но тесты показали, что дополнительный указатель создается и минус при этом, что нельзя внутри функции присвоить новый адрес локальному указателю и чтобы при этом внешний указатель принял новый адрес... &lt;br&gt;&lt;br&gt;&lt;br&gt;Пример: &lt;br&gt;==============&lt;br&gt;#include &amp;lt;iostream&amp;gt;&lt;br&gt;void funcx(int *ptr_xxx) &#123;&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;2: &quot; &amp;lt;&amp;lt; ptr_xxx &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;ptr_xxx = new int;&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;3: &quot; &amp;lt;&amp;lt; ptr_xxx &amp;lt;&amp;lt; &quot;!&#092;n&quot;; &lt;br&gt;&#125; &lt;br&gt; &lt;br&gt;int main() &#123;&lt;br&gt;int* ptr_int;&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;1: &quot; &amp;lt;&amp;lt; ptr_int &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;funcx(ptr_int);&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;4: &quot; &amp;lt;&amp;lt; ptr_int &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;    return 0;&lt;br&gt;&#125;&lt;br&gt;==============&lt;br&gt;</description>

<item>
    <title>изменить адреса указателя при вызове функции (vic)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html#6</link>
    <pubDate>Fri, 27 Feb 2009 09:38:56 GMT</pubDate>
    <description>&amp;gt;попробовал, чтобы знать на будущее - вариант со ссылкой не проходит, возможно &lt;br&gt;&amp;gt;не так что-то делаю, с указателем на указатель работает. &lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;iostream&amp;gt;&lt;br&gt;&lt;br&gt;void f(int *&amp;p) // ссылка на указатель&lt;br&gt;&#123;&lt;br&gt;    p = new int(5); //создаем объект int и возвращаем указатель на него&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;&#123;&lt;br&gt;    int *i = NULL;&lt;br&gt;&lt;br&gt;    std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; std::endl;&lt;br&gt;    f(i);&lt;br&gt;    std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; *i &amp;lt;&amp;lt; std::endl;&lt;br&gt;    delete i;&lt;br&gt;&lt;br&gt;    return 0;&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>изменить адреса указателя при вызове функции (flexik)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html#5</link>
    <pubDate>Fri, 27 Feb 2009 09:03:51 GMT</pubDate>
    <description>&amp;gt;PS для C++ есть кроме указателей еще и ссылки, ссылка это просто &lt;br&gt;&amp;gt;второе имя для переменной, соответственно можно использовать в данном случае ссылку &lt;br&gt;&amp;gt;на указатель в качестве аргумента. &lt;br&gt;&lt;br&gt;попробовал, чтобы знать на будущее - вариант со ссылкой не проходит, возможно не так что-то делаю, с указателем на указатель работает.&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;iostream&amp;gt;&lt;br&gt;void funcx(int &amp;xxx) &lt;br&gt;&#123;&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;2: &quot; &amp;lt;&amp;lt; &amp;xxx &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;&amp;xxx = new int;&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;3: &quot; &amp;lt;&amp;lt; &amp;xxx &amp;lt;&amp;lt; &quot;!&#092;n&quot;; &lt;br&gt;&#125;&lt;br&gt; &lt;br&gt;int main() &lt;br&gt;&#123;&lt;br&gt;int* ptr_int;&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;1: &quot; &amp;lt;&amp;lt; ptr_int &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;funcx( *ptr_int );&lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;4: &quot; &amp;lt;&amp;lt; ptr_int &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;test.cpp: In function &#096;void funcx(int&amp;)&apos;:&lt;br&gt;test.cpp:13(&amp;xxx = new int;): error: ISO C++ forbids cast to non-reference type used as lvalue&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>изменить адреса указателя при вызове функции (flexik)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html#4</link>
    <pubDate>Fri, 27 Feb 2009 08:05:44 GMT</pubDate>
    <description>&lt;br&gt;&amp;gt;Надо было внимательнее читать книги по С (для прокачки скила интуиция :) &lt;br&gt;&amp;gt;), в них во всех ясно говориться что создается копия аргумента &lt;br&gt;&lt;br&gt;Да, про копию знаю, если речь о переменных, в первом своем после про это писал. Просто думал в случае с указателем прозрачно все без копирования. Теперь все ясно.&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt;PS для C++ есть кроме указателей еще и ссылки, ссылка это просто &lt;br&gt;&amp;gt;второе имя для переменной, соответственно можно использовать в данном случае ссылку &lt;br&gt;&amp;gt;на указатель в качестве аргумента. &lt;br&gt;&lt;br&gt;ссылки знаю, конечно, теперь буду знать про ссылки на указатели :) вижу теперь, что вещи очевидные, но до этого о указателе, как о переменной с адресом просто не думал видимо в силу того, что недавно начал си++ изучать и таких ситуаций еще не встречал в процессе.&lt;br&gt;&lt;br&gt;Еще раз всем спасибо за ответы!&lt;br&gt;</description>
</item>

<item>
    <title>изменить адреса указателя при вызове функции (Аноним)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html#3</link>
    <pubDate>Fri, 27 Feb 2009 07:41:29 GMT</pubDate>
    <description>&lt;br&gt;&amp;gt;Интуитивно думал, что будет расширятся область видимости внешнего указателя, чтобы не тратить &lt;br&gt;&amp;gt;время на создание нового локального, но тесты показали, что дополнительный указатель &lt;br&gt;&amp;gt;создается и минус при этом, что нельзя внутри функции присвоить новый &lt;br&gt;&amp;gt;адрес локальному указателю и чтобы при этом внешний указатель принял новый &lt;br&gt;&amp;gt;адрес... &lt;br&gt;&lt;br&gt;Надо было внимательнее читать книги по С (для прокачки скила интуиция :) ), в них во всех ясно говориться что создается копия аргумента и в этом плане указатель ни чем не отличается от просто переменной, т.е. для него точно также создается копия. А значит надо использовать указатель на этот указатель (**ptr). (как бы коммент к посту jd2) :)&lt;br&gt;&lt;br&gt;PS для C++ есть кроме указателей еще и ссылки, ссылка это просто второе имя для переменной, соответственно можно использовать в данном случае ссылку на указатель в качестве аргумента.&lt;br&gt;</description>
</item>

<item>
    <title>изменить адреса указателя при вызове функции (flexik)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html#2</link>
    <pubDate>Fri, 27 Feb 2009 07:35:15 GMT</pubDate>
    <description>&amp;gt;Для этих целей есть указатель на указатель: &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;int **ptr_ptr_xxx &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;То есть, в Вашем случае будет что-то вроде: &lt;br&gt;&lt;br&gt;Спасибо за ответ и спасибо, что именно с примером. То что нужно. Думал про указатель на указатель, когда специально, прежде чем написать здесь, искал ответ в книге Страуструпа. Видел там указатель на указатель без примера, попробовал, но не получилось использовать. По Вашему примеру все вышло, сейчас попытаюсь найти описание логики работы с ними(что именно делают), чтобы применять не путаясь в программе.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>изменить адреса указателя при вызове функции (jd2)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8115.html#1</link>
    <pubDate>Fri, 27 Feb 2009 01:58:35 GMT</pubDate>
    <description>Для этих целей есть указатель на указатель:&lt;br&gt;&lt;br&gt;int **ptr_ptr_xxx&lt;br&gt;&lt;br&gt;То есть, в Вашем случае будет что-то вроде:&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;iostream&amp;gt;&lt;br&gt;void funcx(int **ptr_ptr_xxx) &#123;&lt;br&gt;    std::cout &amp;lt;&amp;lt; &quot;2: &quot; &amp;lt;&amp;lt; *ptr_ptr_xxx &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;    *ptr_ptr_xxx = new int;&lt;br&gt;    std::cout &amp;lt;&amp;lt; &quot;3: &quot; &amp;lt;&amp;lt; *ptr_ptr_xxx &amp;lt;&amp;lt; &quot;!&#092;n&quot;; &lt;br&gt;&#125; &lt;br&gt;&lt;br&gt;int main() &#123;&lt;br&gt;    int* ptr_int = NULL;&lt;br&gt;    std::cout &amp;lt;&amp;lt; &quot;1: &quot; &amp;lt;&amp;lt; ptr_int &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;    funcx(&amp;ptr_int);&lt;br&gt;    std::cout &amp;lt;&amp;lt; &quot;4: &quot; &amp;lt;&amp;lt; ptr_int &amp;lt;&amp;lt; &quot;!&#092;n&quot;;&lt;br&gt;    return 0;&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

</channel>
</rss>
