<?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[Zeiger auf Zeiger]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich bin neu in C++ und dabei auf folgenden Code gestossen:</p>
<pre><code>struct node {
    int wert;
    node *next;
};

void TeileGeradeUngerade(node *&amp; liste, node *&amp; odds, node *&amp; evens)
{
    node **oddsp = &amp;odds;
    node **evensp = &amp;evens;

    for (node *akt = liste; akt != NULL; akt = akt-&gt;next) {
        if (akt-&gt;wert % 2 == 0) {
            *evensp = akt;
            evensp = &amp;(akt-&gt;next);
        } else {
            *oddsp = akt;
            oddsp = &amp;(akt-&gt;next);
        }
    }

    *oddsp = *evensp = liste = NULL;
}
</code></pre>
<p>Die Funktion teilt eine Zahlenliste in zwei Listen auf, eine mit geraden und eine mit ungeraden Zahlen. Soweit so gut, jedoch werden Zeiger auf Zeiger etc. verwendet und da sehe ich noch nicht ganz durch. Kann mir jemand erklären, wie sich die Adressen ändern z.B während eines Schleifendurchlaufs? Ich denke am einfachsten wärs anhand fiktiver Adressen...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173881/zeiger-auf-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 18:28:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173881.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Feb 2007 19:31:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Zeiger on Tue, 20 Feb 2007 19:31:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich bin neu in C++ und dabei auf folgenden Code gestossen:</p>
<pre><code>struct node {
    int wert;
    node *next;
};

void TeileGeradeUngerade(node *&amp; liste, node *&amp; odds, node *&amp; evens)
{
    node **oddsp = &amp;odds;
    node **evensp = &amp;evens;

    for (node *akt = liste; akt != NULL; akt = akt-&gt;next) {
        if (akt-&gt;wert % 2 == 0) {
            *evensp = akt;
            evensp = &amp;(akt-&gt;next);
        } else {
            *oddsp = akt;
            oddsp = &amp;(akt-&gt;next);
        }
    }

    *oddsp = *evensp = liste = NULL;
}
</code></pre>
<p>Die Funktion teilt eine Zahlenliste in zwei Listen auf, eine mit geraden und eine mit ungeraden Zahlen. Soweit so gut, jedoch werden Zeiger auf Zeiger etc. verwendet und da sehe ich noch nicht ganz durch. Kann mir jemand erklären, wie sich die Adressen ändern z.B während eines Schleifendurchlaufs? Ich denke am einfachsten wärs anhand fiktiver Adressen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232231</guid><dc:creator><![CDATA[TomDooley]]></dc:creator><pubDate>Tue, 20 Feb 2007 19:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger on Wed, 21 Feb 2007 07:15:34 GMT]]></title><description><![CDATA[<p>Was ist eine fiktive Adresse? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232376</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Wed, 21 Feb 2007 07:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger on Wed, 21 Feb 2007 07:39:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Was ist eine fiktive Adresse?</p>
</blockquote>
<p>Das heisst wir nehmen beliebige Adressen für das Beispiel:</p>
<pre><code>// Annahme: liste-Inhalt in Adresse $2000, odds $2001, evens $2002
//liste(-Zeiger) an Adresse $1000 (Inhalt $2000)
//odds(-Zeiger) an Adresse $1001 (Inhalt $2001)
//..
void TeileGeradeUngerade(node *&amp; liste, node *&amp; odds, node *&amp; evens)
{
    node **oddsp = &amp;odds; // oddsp(-ZeigerZeiger?)an Adresse $500 (Inhalt $1001 --&gt; Adresse von odds-Zeiger)
    // ...
</code></pre>
<p>Ich bin mir nicht sicher ob das was ich hingeschrieben habe überhaupt möglich ist aber damit sollte das Prinzip klar sein. Wenn jemand eine bessere Möglichkeit weiss mir klar zu machen was, wann wohin zeigt, ist das auch in Ordnung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232387</guid><dc:creator><![CDATA[TomDooley]]></dc:creator><pubDate>Wed, 21 Feb 2007 07:39:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger on Tue, 27 Feb 2007 20:01:43 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Kann mir wirklich niemand helfen? Ich wäre schon froh wenn jemand wenigstens Kommentare hinschreiben könnte was genau abläuft...</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1236416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1236416</guid><dc:creator><![CDATA[TomDooley]]></dc:creator><pubDate>Tue, 27 Feb 2007 20:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger on Tue, 27 Feb 2007 23:06:50 GMT]]></title><description><![CDATA[<p>TomDooley schrieb:</p>
<blockquote>
<p>Hallo</p>
<p>Ich bin neu in C++ und dabei auf folgenden Code gestossen:</p>
<pre><code>struct node {
    int wert;
    node *next;
};

void TeileGeradeUngerade(node *&amp; liste, node *&amp; odds, node *&amp; evens)
{
    node **oddsp = &amp;odds;
    node **evensp = &amp;evens;

    for (node *akt = liste; akt != NULL; akt = akt-&gt;next) {
        if (akt-&gt;wert % 2 == 0) {
            *evensp = akt;
            evensp = &amp;(akt-&gt;next);
        } else {
            *oddsp = akt;
            oddsp = &amp;(akt-&gt;next);
        }
    }

    *oddsp = *evensp = liste = NULL;
}
</code></pre>
<p>Die Funktion teilt eine Zahlenliste in zwei Listen auf, eine mit geraden und eine mit ungeraden Zahlen. Soweit so gut, jedoch werden Zeiger auf Zeiger etc. verwendet und da sehe ich noch nicht ganz durch. Kann mir jemand erklären, wie sich die Adressen ändern z.B während eines Schleifendurchlaufs? Ich denke am einfachsten wärs anhand fiktiver Adressen...</p>
</blockquote>
<p>Hi!</p>
<p>Den Kontext indem deine Funktion ihre Arbeit macht, würde ich gern sehen - man braucht keine Referenzen<br />
auf Zeiger (node *&amp; liste, ...) und auch keine lokalen Zeiger auf Zeiger - einfache Zeiger reichen.<br />
Hab deine Funktion mal in diesem Sinne verändert:</p>
<pre><code class="language-cpp">struct node { 
    int wert; 
    node *next; 
}; 

void TeileGeradeUngerade(node* liste, node* odds, node* evens) 
{ 
    for (node* akt = liste; akt != NULL; akt = akt-&gt;next)
    {
        if (akt-&gt;wert % 2 == 0) 
        { 
            evens-&gt;wert = akt-&gt;wert; 
            evens-&gt;next = evens++;
        } 
        else 
        { 
            odds-&gt;wert = akt-&gt;wert; 
            odds-&gt;next = odds++; 
        } 
    }
    odds-&gt;next  = NULL;
    evens-&gt;next = NULL;
}

int main()
{
    node liste[3] = {{1, &amp;liste[1]},{2, &amp;liste[2]}, {3, NULL}};
    node odds[3];
    node evens[3];

    TeileGeradeUngerade(liste, odds, evens);

}
</code></pre>
<p>Lass das Beispiel im Debugger laufen. Wenn du Fragen dazu hast frage!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1236491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1236491</guid><dc:creator><![CDATA[balduin]]></dc:creator><pubDate>Tue, 27 Feb 2007 23:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger on Wed, 28 Feb 2007 15:32:21 GMT]]></title><description><![CDATA[<p>Danke.</p>
<p>Ich werde das nun mal genau anschauen. Allerdings muss ich dazu sagen, dass meine Variante nicht den Anspruch hat die beste Lösung zu sein. Vielmehr geht es darum zu zeigen, wie Zeiger und Referenzen an einem Extrembeispiel genau funktionieren --&gt; typisches Schulbeispiel eben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1236864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1236864</guid><dc:creator><![CDATA[TomDooley]]></dc:creator><pubDate>Wed, 28 Feb 2007 15:32:21 GMT</pubDate></item></channel></rss>