<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Pointer auf Speicher in mehreren Funktionen verändern?]]></title><description><![CDATA[<p>Ich habe einen Pointer auf einen Byteblock:</p>
<pre><code>std::uint8_t* pBlock = getByteBlock();
</code></pre>
<p>Diesen Byteblock möchte ich nun parsen:</p>
<pre><code>parse(pBlock);

// ...

void parse(std::uint8_t* pBlock) {
   parse_A_Attribute(pBlock);
   parse_B_Attribute(pBlock);
}

void parse_A_Attribute(std::uint8_t* pBlock) {
    // ...
    ++pBlock;
    // ...
    pBlock += 4;
}
</code></pre>
<p>pBlock wird also in &quot;parse&quot; an mehrere Funktionen übergeben, die intern den Pointer inkrementieren und ihre Daten aus dem Block ziehen. Je nach Aufbau des Blocks ist die Anzahl der Bytes, die in parse_A_Attribute und parse_B_Attribute verarbeitet werden, ganz unterschiedlich</p>
<p>Nun habe ich festgestellt, dass zwar in 'parse_A_Attribute' 5x inkrementiert wird, nach der Rückkehr in &quot;parse&quot; der Pointer aber wieder auf den initialen Wert zeigt.</p>
<p>Wird die Adresse pBlock einfach kopiert und ich inkrementiere die Kopie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ?</p>
<p>Wie kann ich das umgehen? Oder muss ich jetzt Pointer auf Pointer machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325944/pointer-auf-speicher-in-mehreren-funktionen-verändern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 16:55:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325944.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 May 2014 17:05:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer auf Speicher in mehreren Funktionen verändern? on Sat, 24 May 2014 17:05:44 GMT]]></title><description><![CDATA[<p>Ich habe einen Pointer auf einen Byteblock:</p>
<pre><code>std::uint8_t* pBlock = getByteBlock();
</code></pre>
<p>Diesen Byteblock möchte ich nun parsen:</p>
<pre><code>parse(pBlock);

// ...

void parse(std::uint8_t* pBlock) {
   parse_A_Attribute(pBlock);
   parse_B_Attribute(pBlock);
}

void parse_A_Attribute(std::uint8_t* pBlock) {
    // ...
    ++pBlock;
    // ...
    pBlock += 4;
}
</code></pre>
<p>pBlock wird also in &quot;parse&quot; an mehrere Funktionen übergeben, die intern den Pointer inkrementieren und ihre Daten aus dem Block ziehen. Je nach Aufbau des Blocks ist die Anzahl der Bytes, die in parse_A_Attribute und parse_B_Attribute verarbeitet werden, ganz unterschiedlich</p>
<p>Nun habe ich festgestellt, dass zwar in 'parse_A_Attribute' 5x inkrementiert wird, nach der Rückkehr in &quot;parse&quot; der Pointer aber wieder auf den initialen Wert zeigt.</p>
<p>Wird die Adresse pBlock einfach kopiert und ich inkrementiere die Kopie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ?</p>
<p>Wie kann ich das umgehen? Oder muss ich jetzt Pointer auf Pointer machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400671</guid><dc:creator><![CDATA[Verlorener]]></dc:creator><pubDate>Sat, 24 May 2014 17:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Speicher in mehreren Funktionen verändern? on Sat, 24 May 2014 17:06:45 GMT]]></title><description><![CDATA[<p>Die Zeile mit der &quot;+= 4&quot; ist ein schlechtes Beispiel, im Code taucht das nicht auf. Dort gibt es nur &quot;++pBlock&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400672</guid><dc:creator><![CDATA[Verlorener]]></dc:creator><pubDate>Sat, 24 May 2014 17:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Speicher in mehreren Funktionen verändern? on Sat, 24 May 2014 17:32:41 GMT]]></title><description><![CDATA[<p>Verlorener schrieb:</p>
<blockquote>
<p>Wird die Adresse pBlock einfach kopiert und ich inkrementiere die Kopie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ?</p>
</blockquote>
<p>Ja</p>
<p>Verlorener schrieb:</p>
<blockquote>
<p>Wie kann ich das umgehen? Oder muss ich jetzt Pointer auf Pointer machen</p>
</blockquote>
<p>Referenz auf Zeiger übergeben oder den neuen Zeiger zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400680</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 24 May 2014 17:32:41 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf Speicher in mehreren Funktionen verändern? on Sat, 24 May 2014 17:33:38 GMT]]></title><description><![CDATA[<p>Natürlich ist das eine Kopie! Wenn du den Pointer selber verändern willst, kannst du eine Referenz darauf übergeben. Besser wäre es, wenn du den Wert als return zurückliefest. Dann kann der Aufrufer entscheiden, ob der ursprüngliche Pointer verändert werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400681</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 24 May 2014 17:33:38 GMT</pubDate></item></channel></rss>