<?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>habe folgendes Problem:</p>
<p>Ich habe in ein Array aus Strukturen dynamisch angelegt:</p>
<p>BallData_t *ballArr = new BallData_t [BallNum] (BallNum ist die Anzahl der Bälle)</p>
<p>nun möchte ich später mit einem anderen Zeiger auf den ersten Eintrag<br />
dieses Arrays verweisen, jedoch zeigt der Zeiger dann immer auf den letzten Eintrag, den ich gemacht habe...<br />
hier mein Code, falls es weiter hilft</p>
<pre><code class="language-cpp">const int BallNum = 40;    // Zahl N der Baelle
const int Rad     =  5;    // Radius eines Balls
const int P_C     =  5;    // Parameter C der parametrisierten Ballposition
const int P_S     =  2;    // Parameter S der parametrisierten Ballposition
const int Dt_Rel  = 25;    
struct BallData_s
  {
   double x, y;
   double t, dt;
   int    vis;
  };
typedef BallData_s BallData_t;

static int width, height;

static BallData_t *ballArr;
static BallData_t ball;

static int bahnRad;
static int bahnZentrX, bahnZentrY;

void BGEvtInit(void)
  {
   BGGetsize(&amp;width, &amp;height);

   bahnRad    = (width&gt;height)? height/3 : width/3;   // zweiPi =: bahnRad
   bahnZentrX = width/2;
   bahnZentrY = height/2;

   ballArr  = new BallData_t [BallNum+1];

	double ballDist = (bahnRad*2) / BallNum;

	for (int zae = 1; zae &lt;= BallNum; zae++)
	  {
		ballArr-&gt;t   = ballDist*zae;			
		ballArr-&gt;x   = (bahnZentrX+bahnRad*cos(P_C*ballArr-&gt;t));
		ballArr-&gt;y   = (bahnZentrY+bahnRad*sin(P_S*ballArr-&gt;t));
		ballArr-&gt;dt  = ballArr-&gt;t/Dt_Rel;
		ballArr-&gt;vis = false;		
      ballArr++; 
     }
  } 

static void ballEvtDraw(BallData_t&amp; ball, int del)
  {
   double&amp; x   = ball.x;
   double&amp; y   = ball.y;
   int&amp;    vis = ball.vis;

   if (vis &amp;&amp; del) BGCircle((int)x, (int)y, Rad);

   vis=BGCircle((int)x, (int)y, Rad);
  }

void BGEvtDraw(int del)
  {
   BallData_t *pballArr;

	for (int a = 0; a &lt;= BallNum; a++)
	  {
		pballArr = &amp;ballArr[a];  &lt;---hier mein Problem!
		ball.x   = pballArr-&gt;x;
		ball.y   = pballArr-&gt;y;
		ball.t   = pballArr-&gt;t;
		ball.dt  = pballArr-&gt;dt;
		ball.vis = pballArr-&gt;vis;
		ballEvtDraw(ball, del);	
	  }
  }

void BGEvtExit(void)
  {
   free(ballArr);
  }
</code></pre>
<p>Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147226/zeiger-auf-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 05:39:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147226.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 May 2006 12:18:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 12:20:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgendes Problem:</p>
<p>Ich habe in ein Array aus Strukturen dynamisch angelegt:</p>
<p>BallData_t *ballArr = new BallData_t [BallNum] (BallNum ist die Anzahl der Bälle)</p>
<p>nun möchte ich später mit einem anderen Zeiger auf den ersten Eintrag<br />
dieses Arrays verweisen, jedoch zeigt der Zeiger dann immer auf den letzten Eintrag, den ich gemacht habe...<br />
hier mein Code, falls es weiter hilft</p>
<pre><code class="language-cpp">const int BallNum = 40;    // Zahl N der Baelle
const int Rad     =  5;    // Radius eines Balls
const int P_C     =  5;    // Parameter C der parametrisierten Ballposition
const int P_S     =  2;    // Parameter S der parametrisierten Ballposition
const int Dt_Rel  = 25;    
struct BallData_s
  {
   double x, y;
   double t, dt;
   int    vis;
  };
typedef BallData_s BallData_t;

static int width, height;

static BallData_t *ballArr;
static BallData_t ball;

static int bahnRad;
static int bahnZentrX, bahnZentrY;

void BGEvtInit(void)
  {
   BGGetsize(&amp;width, &amp;height);

   bahnRad    = (width&gt;height)? height/3 : width/3;   // zweiPi =: bahnRad
   bahnZentrX = width/2;
   bahnZentrY = height/2;

   ballArr  = new BallData_t [BallNum+1];

	double ballDist = (bahnRad*2) / BallNum;

	for (int zae = 1; zae &lt;= BallNum; zae++)
	  {
		ballArr-&gt;t   = ballDist*zae;			
		ballArr-&gt;x   = (bahnZentrX+bahnRad*cos(P_C*ballArr-&gt;t));
		ballArr-&gt;y   = (bahnZentrY+bahnRad*sin(P_S*ballArr-&gt;t));
		ballArr-&gt;dt  = ballArr-&gt;t/Dt_Rel;
		ballArr-&gt;vis = false;		
      ballArr++; 
     }
  } 

static void ballEvtDraw(BallData_t&amp; ball, int del)
  {
   double&amp; x   = ball.x;
   double&amp; y   = ball.y;
   int&amp;    vis = ball.vis;

   if (vis &amp;&amp; del) BGCircle((int)x, (int)y, Rad);

   vis=BGCircle((int)x, (int)y, Rad);
  }

void BGEvtDraw(int del)
  {
   BallData_t *pballArr;

	for (int a = 0; a &lt;= BallNum; a++)
	  {
		pballArr = &amp;ballArr[a];  &lt;---hier mein Problem!
		ball.x   = pballArr-&gt;x;
		ball.y   = pballArr-&gt;y;
		ball.t   = pballArr-&gt;t;
		ball.dt  = pballArr-&gt;dt;
		ball.vis = pballArr-&gt;vis;
		ballEvtDraw(ball, del);	
	  }
  }

void BGEvtExit(void)
  {
   free(ballArr);
  }
</code></pre>
<p>Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058083</guid><dc:creator><![CDATA[MastaZulu]]></dc:creator><pubDate>Mon, 15 May 2006 12:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 13:23:53 GMT]]></title><description><![CDATA[<p>Wundert dich das wenn du den Schleifenzähler als Index nimmst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058126</guid><dc:creator><![CDATA[Dr. Prof]]></dc:creator><pubDate>Mon, 15 May 2006 13:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 13:26:02 GMT]]></title><description><![CDATA[<p>Du verwendest den Zeiger um auf die Attribute der Instanzen von den Strukturen zuzugreifen.* Dem Zeiger wird die Adresse des Elements an Position n zugewiesen, wobei der Wert n nach jedem Schleifendurchlauf inkrementiert wird. Bei dem letzten Durchlauf der Schleife zeigt der Zeiger auf das letzte Element des Containers. Anschließend wird der Wert des Zeigers nicht mehr verändert; der Zeiger zeigt weiter auf den letzten Eintrag.</p>
<p>* Warum verwendest du nicht den Operator . zum Zugriff auf die Attribute? ...</p>
<pre><code class="language-cpp">struct test
{
  int a;
  int b;
};

test v;

v.a = 1;
v.b = 2;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1058130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058130</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 15 May 2006 13:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 13:29:05 GMT]]></title><description><![CDATA[<p>oder nimm einen lokalen Zeiger in deiner Funktion zum Weiterschalten.<br />
Was soll das hier?</p>
<pre><code class="language-cpp">typedef BallData_s BallData_t;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1058134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058134</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 15 May 2006 13:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 13:33:27 GMT]]></title><description><![CDATA[<p>Deine Schleife darf nur bis BallNum-1<br />
laufen da das Array Werte [0..BallNum-1] Werte hält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058137</guid><dc:creator><![CDATA[Rufus]]></dc:creator><pubDate>Mon, 15 May 2006 13:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 13:49:45 GMT]]></title><description><![CDATA[<p>Nö,<br />
denn siehe</p>
<pre><code class="language-cpp">ballArr  = new BallData_t [BallNum+1];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1058153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058153</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 15 May 2006 13:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Mon, 15 May 2006 13:58:23 GMT]]></title><description><![CDATA[<p>Und noch eine Frage: Wo kommt das free(ballArr) her. Wenn schon, dann passend zum new das delete verwenden, oder passend zum free malloc verwenden. Aber niemals mischen. Und außerdem setzen free und delete voraus, den Zeiger auf das erste Array-Element zu erhalten. Dies ist bei Dir nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058168</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 15 May 2006 13:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Tue, 16 May 2006 12:15:58 GMT]]></title><description><![CDATA[<p>ja genau da liegt ja mein problem, wie krieg ich denn den zeiger wieder auf das erste element zurück?</p>
<p>habs jetzt nochmal bissl geändert, es stürzt schonmal nicht mehr ab, aber funktionieren tuts immernoch nich richtig...</p>
<pre><code class="language-cpp">struct BallData_s
  {
   double x, y;
   double t, dt;
   int    vis;
  };
typedef BallData_s BallData_t;

static int width, height;

static BallData_t *ballArr;
static BallData_t ball;

static int bahnRad;
static int bahnZentrX, bahnZentrY;

void BGEvtInit(void)
  {
   BGGetsize(&amp;width, &amp;height);

   bahnRad    = (width&gt;height)? height/3 : width/3;
   bahnZentrX = width/2;
   bahnZentrY = height/2;

   ballArr  = new BallData_t [BallNum+1];
	double ballDist = bahnRad/BallNum;

	for (int zae=0; zae&lt;=BallNum-1; zae++)
	  {
		ballArr-&gt;t   = ballDist*zae;			
		ballArr-&gt;x   = (bahnZentrX+bahnRad*cos(P_C*ball.t));
		ballArr-&gt;y   = (bahnZentrY+bahnRad*sin(P_S*ball.t));
		ballArr-&gt;dt  = ball.t/Dt_Rel;
		ballArr-&gt;vis = false;	 
		ballArr++;
     }
  }

static void ballEvtDraw(BallData_t&amp; ball, int del)
  {
   double&amp; x   = ball.x;
   double&amp; y   = ball.y;
   int&amp;    vis = ball.vis;

   if (vis &amp;&amp; del) BGCircle((int)x, (int)y, Rad);

	ball.x = (bahnZentrX+bahnRad*cos(P_C*ball.t));
	ball.y = (bahnZentrY+bahnRad*sin(P_S*ball.t));
	ball.t+=ball.dt;

   vis=BGCircle((int)x, (int)y, Rad);
  }

void BGEvtDraw(int del)
  {
   BallData_t *pballArr;
	int b;

	for (b=0; b&lt;=BallNum-1; b++)
	  {
		pballArr = ballArr;
		ball.x   = pballArr-&gt;x;
		ball.y   = pballArr-&gt;y;
		ball.t   = pballArr-&gt;t;
		ball.dt  = pballArr-&gt;dt;
		ball.vis = pballArr-&gt;vis;
		ballEvtDraw(ball, del);	
	  }
  }

void BGEvtExit(void)
  {
   delete(ballArr);
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1058831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058831</guid><dc:creator><![CDATA[MastaZulu]]></dc:creator><pubDate>Tue, 16 May 2006 12:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Tue, 16 May 2006 12:19:17 GMT]]></title><description><![CDATA[<blockquote>
<p>ja genau da liegt ja mein problem, wie krieg ich denn den zeiger wieder auf das erste element zurück?</p>
</blockquote>
<p>Gegenfrage: Warum nimmt du ihn überhaupt vom ersten Element weg? Wenn du durch dein Array iterieren willst, nimm dir eine Kopie des Zeigers und schieb die vorwärts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1058839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058839</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 16 May 2006 12:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Zeiger? on Tue, 16 May 2006 12:29:18 GMT]]></title><description><![CDATA[<p>oder nutze halt den IndexOperator, z.Bsp.</p>
<pre><code class="language-cpp">ballArr  = new BallData_t [BallNum+1];
    double ballDist = bahnRad/BallNum;

    for (int zae=0; zae&lt;=BallNum; zae++)
      {
        ballArr[zae].t   = ballDist*zae;           
        ballArr[zae].x   = (bahnZentrX+bahnRad*cos(P_C*ball.t));
        ballArr[zae].y   = (bahnZentrY+bahnRad*sin(P_S*ball.t));
        ballArr[zae].dt  = ball.t/Dt_Rel;
        ballArr[zae].vis = false;     
     }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1058854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1058854</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 16 May 2006 12:29:18 GMT</pubDate></item></channel></rss>