<?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[Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben]]></title><description><![CDATA[<p>Hallo<br />
Ich bin neu im C++ Geschäft und verzweifle gerade an einer Studienaufgabe.<br />
Ich soll in einer Funktion ein dynamsiches Feld erzeugen und dieses Feld mit &quot;Zeiger auf Zeiger &quot;, übergeben. Das Land der Zeiger ist &quot;wundervoll&quot; für Neulinge wie mich aber es nutze ja alles nichts :). habe mir auch schon zahlreiche Webseiten dazu angelesen aber so wirklch verstanden habe ich es anscheinend nicht. Ich habe folgendes probiert:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

using namespace std;

// Feld erzeugen mit Zeiger auf Zeiger //

void feld_erzeugen (int **xy, int n)
{

 xy = new int* [n];
 srand (time(NULL));
 for (int i=0;i&lt;n;i++)
*(xy+i)=rand()%100

  for (int i=0;i&lt;n;i++)
         {if (!(i%10))
             cout&lt;&lt;endl;
          cout.width(4);
        cout&lt;&lt; *(xy+i);
}
// Feld ausgeben mit Zeiger auf Zeiger //

void feld_ausgeben(int **xy, int n)
{
     for (int i=0;i&lt;n;i++)
         {if (!(i%10))
             cout&lt;&lt;endl;
          cout.width(4);
          cout&lt;&lt; *(xy+i);          
         }     
}

int main () 
{
  int *zeiger=0;    
  int  m=0;

  cout&lt;&lt;&quot;Bitte groesse des Feldes eingeben&quot;&lt;&lt;endl;
  cin&gt;&gt;m;
  feld_erzeugen (&amp;zeiger,m);
  feld_ausgeben (&amp;zeiger,m);  
 return 0;   
}
</code></pre>
<p>Meine Fragen: 1. Ist die Art wie ich das verusche überhaupt korrekt?<br />
und 2. Wenn ja wo liegt der Fehler? ist es vll Syntax bedingt ?.</p>
<p>Vielen Dank schonmal für eure Hilfe. Ich warte gespannt .</p>
<p>Gruß Cid</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262773/dynamische-felder-in-funktionen-per-zeiger-an-andere-funktionen-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 11:06:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262773.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Mar 2010 09:19:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 09:19:36 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich bin neu im C++ Geschäft und verzweifle gerade an einer Studienaufgabe.<br />
Ich soll in einer Funktion ein dynamsiches Feld erzeugen und dieses Feld mit &quot;Zeiger auf Zeiger &quot;, übergeben. Das Land der Zeiger ist &quot;wundervoll&quot; für Neulinge wie mich aber es nutze ja alles nichts :). habe mir auch schon zahlreiche Webseiten dazu angelesen aber so wirklch verstanden habe ich es anscheinend nicht. Ich habe folgendes probiert:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

using namespace std;

// Feld erzeugen mit Zeiger auf Zeiger //

void feld_erzeugen (int **xy, int n)
{

 xy = new int* [n];
 srand (time(NULL));
 for (int i=0;i&lt;n;i++)
*(xy+i)=rand()%100

  for (int i=0;i&lt;n;i++)
         {if (!(i%10))
             cout&lt;&lt;endl;
          cout.width(4);
        cout&lt;&lt; *(xy+i);
}
// Feld ausgeben mit Zeiger auf Zeiger //

void feld_ausgeben(int **xy, int n)
{
     for (int i=0;i&lt;n;i++)
         {if (!(i%10))
             cout&lt;&lt;endl;
          cout.width(4);
          cout&lt;&lt; *(xy+i);          
         }     
}

int main () 
{
  int *zeiger=0;    
  int  m=0;

  cout&lt;&lt;&quot;Bitte groesse des Feldes eingeben&quot;&lt;&lt;endl;
  cin&gt;&gt;m;
  feld_erzeugen (&amp;zeiger,m);
  feld_ausgeben (&amp;zeiger,m);  
 return 0;   
}
</code></pre>
<p>Meine Fragen: 1. Ist die Art wie ich das verusche überhaupt korrekt?<br />
und 2. Wenn ja wo liegt der Fehler? ist es vll Syntax bedingt ?.</p>
<p>Vielen Dank schonmal für eure Hilfe. Ich warte gespannt .</p>
<p>Gruß Cid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867343</guid><dc:creator><![CDATA[cidburner]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 09:45:36 GMT]]></title><description><![CDATA[<p>Dein Schnippsel mit meinen Kommentaren:</p>
<p>cidburner schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void feld_erzeugen (int **xy, int n)
{
  xy = new int* [n];     // Erzeugt ein dyn. Array aus Zeigern
                         // --&gt; nicht das, was Du willst
  srand (time(NULL));
  for (int i=0;i&lt;n;i++)
     *(xy+i)=rand()%100; // *(xy+i) ist dasselbe wie xy[i]
  ...                    // aber xy[i] referenziert einen Zeiger auf int
</code></pre>
</blockquote>
<p>Ich glaube, Du wolltest so etwas haben:</p>
<pre><code class="language-cpp">void feld_erzeugen (int **xy, int n)
{
  assert(xy != 0);
  *xy = new int [n];     // Erzeugt ein dyn. Array aus ints
                         // und speichert den Zeiger in *xy
  srand (time(NULL));
  for (int i=0;i&lt;n;i++)
    (*xy)[i] = rand()%100;
  ...
</code></pre>
<p>Mit einer lokalen Referenz ist das vielleicht noch einfacher:</p>
<pre><code class="language-cpp">void feld_erzeugen (int **xy, int n)
{
  assert(xy != 0);
  int* &amp; izref = *xy;
  izref = new int [n];   // Erzeugt ein dyn. Array aus ints
                         // und speichert den Zeiger in izref
  srand (time(NULL));
  for (int i=0;i&lt;n;i++)
    izref[i] = rand()%100;
  ...
</code></pre>
<p>wobei &quot;izref&quot; für &quot;int-zeiger-referenz&quot; steht -- eine Referenz auf einen Zeiger auf int.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867355</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 11:43:20 GMT]]></title><description><![CDATA[<p>Super schick , es läuft , es läuft, Dickes Danke</p>
<p>Nun noch damit ich das ganze auch verstehe</p>
<p>warum muss ich das so schreiben ?</p>
<p>*xy = new int [n];</p>
<p>Auch noch nicht ganz verstanden: Eventuell ne andere Erklärung ?<br />
//<br />
*(xy+i) ist dasselbe wie xy[i]<br />
... // aber xy[i] referenziert einen Zeiger auf int<br />
//</p>
<p>Und zu dem Problem zeiger auf Zeiger, wie es in der Aufgaben Stellung verlangt ist. Bedeutet das ich den einen Zeiger global anlegen muss oder ? . So wie ichs oben gemacht habe, ne andere Möglichkeit gibt es nicht ?. Unser Tutor meinte mal in einer e-mail, etwas von globale Zeiger wären unnötig, was genau er damit meinte ist mir wie gesagt nicht ganz klar, daher frag ich hier nochmal nach.</p>
<p>gruß Cid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867421</guid><dc:creator><![CDATA[cidburner]]></dc:creator><pubDate>Thu, 11 Mar 2010 11:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 11:44:05 GMT]]></title><description><![CDATA[<p>cidburner schrieb:</p>
<blockquote>
<p>warum muss ich das so schreiben ?</p>
<p>*xy = new int [n];</p>
</blockquote>
<p>Weil sonst der geänderte Wert des Zeigers verloren geht. Siehe Call-by-Value (vs. Call-by-Reference. Wobei du kein CbR nimmst, obwohl es das in C++ gibt und hier verständlicher wäre.)</p>
<blockquote>
<p>Und zu dem Problem zeiger auf Zeiger, wie es in der Aufgaben Stellung verlangt ist.</p>
</blockquote>
<p>Wo ist das Problem?</p>
<blockquote>
<p>Bedeutet das ich den einen Zeiger global anlegen muss oder ? . So wie ichs oben gemacht habe, ne andere Möglichkeit gibt es nicht ?.</p>
</blockquote>
<p>global anlegen? wovon sprichst du?</p>
<p>P.S. zu jedem new[] gehört ein delete[] <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867429</guid><dc:creator><![CDATA[CptC]]></dc:creator><pubDate>Thu, 11 Mar 2010 11:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 11:56:25 GMT]]></title><description><![CDATA[<p>hm wie gesagt bin neu im c++</p>
<p>also</p>
<p>int main ()</p>
<p>int *zeiger = ; // Ist also nicht global ?? //</p>
<p>ich habe am ende vom Programm delete [] zeiger; reicht das um das komplette Feld zu löschen ?</p>
<p>Zeiger auf Zeiger: hat sich geklärt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867437</guid><dc:creator><![CDATA[cidburner]]></dc:creator><pubDate>Thu, 11 Mar 2010 11:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 11:57:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int a; // &lt;-- global

int main() {
  int b; // &lt;-- lokal
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1867439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867439</guid><dc:creator><![CDATA[CptC]]></dc:creator><pubDate>Thu, 11 Mar 2010 11:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 12:48:10 GMT]]></title><description><![CDATA[<p>ah ok , danke</p>
<p>die sache mit speicherfreigabe, ist die ok ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867461</guid><dc:creator><![CDATA[cidburner]]></dc:creator><pubDate>Thu, 11 Mar 2010 12:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 13:52:05 GMT]]></title><description><![CDATA[<p>cidburner schrieb:</p>
<blockquote>
<p>warum muss ich das so schreiben ?</p>
<p>*xy = new int [n];</p>
</blockquote>
<p>Am besten malst Du es Dir mal auf, was wo wie im Speicher steht und von welchem Typ alles ist. Du rufst feld_erzeugen ja mit einem Zeiger auf einen Zeiger auf int auf, damit die Funktion den Zeiger auf int verändern kann. Der Zeiger auf int ist nunmal *xy, xy selbst ist der Zeiger auf Zeiger auf int.</p>
<p>cidburner schrieb:</p>
<blockquote>
<p>Auch noch nicht ganz verstanden: Eventuell ne andere Erklärung ?<br />
// *(xy+i) ist dasselbe wie xy[i]<br />
// aber xy[i] referenziert einen Zeiger auf int</p>
</blockquote>
<p>Zum ersten gibt es nicht viel zu erklären. <code>Z[X]</code> ist einfach eine Akbürzung für <code>*(Z+X)</code> , falls Z von einem &quot;eingebauten&quot; Typ (wie zB ein normaler Zeiger) ist. Da xz ein Zeiger auf Zeiger auf int ist, ist *xy ein Zeiger auf int. Damit ist xy[i] auch ein Zeiger auf int und nichts, in dem Du Ganzzahlen speichern kannst.</p>
<p>cidburner schrieb:</p>
<blockquote>
<p>Und zu dem Problem zeiger auf Zeiger, wie es in der Aufgaben Stellung verlangt ist. Bedeutet das ich den einen Zeiger global anlegen muss oder ?</p>
</blockquote>
<p>Nö, das hat damit nichts zu tun.</p>
<pre><code class="language-cpp">int main() {
  int   i  = 99;
  int*  z  = 0;
  int** zz = &amp;z;
  * zz = &amp;i;
  **zz += 1;
  cout &lt;&lt; b &lt;&lt; '\n';
}
</code></pre>
<p>ergibt 100 als Programmausgabe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867515</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 13:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 13:54:32 GMT]]></title><description><![CDATA[<p>[quote=&quot;krümelkacker&quot;]</p>
<pre><code class="language-cpp">cout &lt;&lt; b &lt;&lt; '\n';
</code></pre>
<p>sollte <code>i</code> statt <code>b</code> sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867517</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 13:54:32 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Felder in Funktionen per zeiger an andere Funktionen übergeben on Thu, 11 Mar 2010 14:43:17 GMT]]></title><description><![CDATA[<p>jo ok , so langsam ergibt das sinn <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="🙂"
    /> , danke nochmal an alle Beteiligten, ich setzt mich heute abend nochmal ran um das ganze nach zu vollziehen, falls ich fragen habe , melde ich mich wieder</p>
<p>gruß cid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867539</guid><dc:creator><![CDATA[cidburner]]></dc:creator><pubDate>Thu, 11 Mar 2010 14:43:17 GMT</pubDate></item></channel></rss>