<?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[Habe ich etwas mit den Zeigern falsch gemacht???]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich arbeite mich gerade in Zeiger ein (lerne neu C++) und stoße an einer Stelle auf etwas, was ich nicht so haben wollte. Hier mal der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

void ausgeben(int *a, int laenge);

void ausgeben(int *a, int laenge){

	int b[laenge];

	for(int i = 0; i &lt; laenge; i++){
		cout &lt;&lt; &quot;\n&quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; *(a+i);
		*(b+i) = 0;
	}
	a = b;
	cout &lt;&lt; &quot;\nENDE!&quot;;
}

int main(){

	int feld[10];

	int laenge = (sizeof(feld) / sizeof(int));

	cout &lt;&lt; &quot;\n Der Array hat &quot;&lt;&lt;laenge&lt;&lt;&quot; Zellen. \n Nun belegen wir es mit Zahlen!&quot; &lt;&lt; endl;

	for (int i = 0; i &lt; laenge; i++ ){
		feld[i] = i;
	}

	ausgeben(feld,laenge);
	ausgeben(feld,laenge);

	return = 0;
}
</code></pre>
<p>Die Funktion ausgeben gibt halt den übergebenen Array aus, aber erstellt selbst einen, füllt ihn mit null-werten. So, nun wollte ih folgendes machen. Diesen mit Nullen gefüllten Array b -&gt; seine Adresse wollte ich in a reinschreiben. A ist zwar nur eine Kopie von feld, aber letztendlich die Kopie einer Adresse, kann also direkt an dem referenzierten Array arbeiten. Deshalb dachte ich: wenn ich b in a kopiere und im Hauptprogramm nochmal &quot;feld&quot; durch ausgabe(...) ausgeben lasse, sollten nur 0en erscheinen. Tun sie aber nicht. Wo liegt mein Denkfehler? Kann mir bitte jemand helfen?</p>
<p>Vielen Dank im Voraus.</p>
<p>Mfg,</p>
<p>pingu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246732/habe-ich-etwas-mit-den-zeigern-falsch-gemacht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 21:25:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246732.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Jul 2009 18:54:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Habe ich etwas mit den Zeigern falsch gemacht??? on Fri, 31 Jul 2009 18:54:15 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich arbeite mich gerade in Zeiger ein (lerne neu C++) und stoße an einer Stelle auf etwas, was ich nicht so haben wollte. Hier mal der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

void ausgeben(int *a, int laenge);

void ausgeben(int *a, int laenge){

	int b[laenge];

	for(int i = 0; i &lt; laenge; i++){
		cout &lt;&lt; &quot;\n&quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; *(a+i);
		*(b+i) = 0;
	}
	a = b;
	cout &lt;&lt; &quot;\nENDE!&quot;;
}

int main(){

	int feld[10];

	int laenge = (sizeof(feld) / sizeof(int));

	cout &lt;&lt; &quot;\n Der Array hat &quot;&lt;&lt;laenge&lt;&lt;&quot; Zellen. \n Nun belegen wir es mit Zahlen!&quot; &lt;&lt; endl;

	for (int i = 0; i &lt; laenge; i++ ){
		feld[i] = i;
	}

	ausgeben(feld,laenge);
	ausgeben(feld,laenge);

	return = 0;
}
</code></pre>
<p>Die Funktion ausgeben gibt halt den übergebenen Array aus, aber erstellt selbst einen, füllt ihn mit null-werten. So, nun wollte ih folgendes machen. Diesen mit Nullen gefüllten Array b -&gt; seine Adresse wollte ich in a reinschreiben. A ist zwar nur eine Kopie von feld, aber letztendlich die Kopie einer Adresse, kann also direkt an dem referenzierten Array arbeiten. Deshalb dachte ich: wenn ich b in a kopiere und im Hauptprogramm nochmal &quot;feld&quot; durch ausgabe(...) ausgeben lasse, sollten nur 0en erscheinen. Tun sie aber nicht. Wo liegt mein Denkfehler? Kann mir bitte jemand helfen?</p>
<p>Vielen Dank im Voraus.</p>
<p>Mfg,</p>
<p>pingu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753159</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Fri, 31 Jul 2009 18:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Habe ich etwas mit den Zeigern falsch gemacht??? on Fri, 31 Jul 2009 19:10:42 GMT]]></title><description><![CDATA[<p>a ist in der Funktion lediglich eine Kopie des Zeigers auf das Array. Somit kannst du a zuweisen, was du willst, es wird nur die interne Kopie verändert. Der Bereich, auf den der Zeiger zeigt ist ja unverändert. Du brauchst da einen Zeiger auf den Zeiger.</p>
<pre><code class="language-cpp">void ausgeben(int **a, int laenge){

    int b[laenge];

    for(int i = 0; i &lt; laenge; i++){
        cout &lt;&lt; &quot;\n&quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; *(*a+i);
        *(b+i) = 0;
    }
    *a = b;
    cout &lt;&lt; &quot;\nENDE!&quot;;
}
</code></pre>
<pre><code class="language-cpp">ausgeben(&amp;feld,laenge);
</code></pre>
<p>btw:<br />
Eine Vorwärtsdeklaration einer Funktion ist lediglich nötig, wenn die Definition nach der Benutzung steht. (Also Quellcode-mässig gesehen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753164</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 31 Jul 2009 19:10:42 GMT</pubDate></item><item><title><![CDATA[Reply to Habe ich etwas mit den Zeigern falsch gemacht??? on Fri, 31 Jul 2009 19:55:53 GMT]]></title><description><![CDATA[<p>Ich hab das jetzt so gemacht, wue di es mir gezeigt hast, aber hab folgende Fehlermeldungen bekommen (Ich benutze den GCC unter Windows):</p>
<pre><code>feld.cc: In function `int main()':
feld.cc:31: error: cannot convert `int (*)[10]' to `int**' for argument `1' to `
void ausgeben(int**, int)'
feld.cc:32: error: cannot convert `int (*)[10]' to `int**' for argument `1' to `
void ausgeben(int**, int)'
feld.cc:34: error: expected primary-expression before '=' token
</code></pre>
<p>Was bedeuten diese Fehlermeldungen bzw. was ist der Fehler?</p>
<p>EDIT: Wenn ich das richtig verstehe, sagt der gcc, dass der erste übergebene Parameter, also &amp;feld, nicht mit dem übereinstimmt, wie es in der Funktionsdeklaration vorgegeben ist, mMn sieht es richtig aus. Ok, ich hab auch nicht viel Erfahrung mit Zeigern und C++ überhaupt...aber was sieht ihr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753184</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Fri, 31 Jul 2009 19:55:53 GMT</pubDate></item><item><title><![CDATA[Reply to Habe ich etwas mit den Zeigern falsch gemacht??? on Sat, 01 Aug 2009 09:03:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Ok, ich hab auch nicht viel Erfahrung mit Zeigern und C++ überhaupt.</p>
</blockquote>
<p>Wenn du Software in dieser Sprache schreiben moechtest, dann musst du sie auch lernen.</p>
<blockquote>
<p>aber was sieht ihr?</p>
</blockquote>
<p>Rosarote Elephanten ... wirklich!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753346</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 01 Aug 2009 09:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Habe ich etwas mit den Zeigern falsch gemacht??? on Sat, 01 Aug 2009 09:18:18 GMT]]></title><description><![CDATA[<p>Das ist dann die Feinheit der C-Programmierung: Felder und Zeiger sind halt doch etwas anderes, d.h. nicht direkt kopierbar.</p>
<p>Aber generell macht deine Vorgehensweise keinen Sinn. Die Funktion &quot;ausgeben&quot; sollte keine Änderungen vornehmen!</p>
<p>Und falls das nur ein Testprogramm für dich ist, dann kannst du auch das übergebene Array direkt beschreiben:</p>
<pre><code class="language-cpp">void ausgeben(int *a, int laenge)
{
    for(int i = 0; i &lt; laenge; i++)
    {
        cout &lt;&lt; &quot;\n&quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; a[i]; // besser als *(*a+i) !!!
        a[i] = 0; // &lt;- direkt danach verändern
    }
    cout &lt;&lt; &quot;\nENDE!&quot;;
}
</code></pre>
<p>P.S: Da du ja mehr an C++ interessiert bist, solltest du besser gleich die Klassen der Standard-Lib benutzen, z.B. vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753363</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 01 Aug 2009 09:18:18 GMT</pubDate></item></channel></rss>