<?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[Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe)]]></title><description><![CDATA[<p>Hi,</p>
<p>also das Problem ist an sich schon gelöst. Nur verstehe ich absolut nicht, warum das funktioniert und damit bringt mir das Kennen der Lösung absolut gar nichts!</p>
<p>Folgendes:<br />
Ich habe einen Vector mit Value-Zeigern definiert in der Klasse &quot;DataPacket&quot; definiert</p>
<pre><code class="language-cpp">vector&lt; Value* &gt; dataVector;
</code></pre>
<p>Jetzt wird der Vector mit float werten befüllt, dann per TCP verschickt und später wieder aufgenommen (alles noch in der Klasse DataPacket).</p>
<p>Jetzt will ich das erste Element zweier verschiedener Vectoren multiplizieren.<br />
Ich dachte mir, dass das ungefähr so gehen sollte:</p>
<pre><code class="language-cpp">((float) *(float*)(p_old-&gt;dataVector[0])) * ((float) *(float*)(p-&gt;dataVector[0]));
</code></pre>
<p>Der Kompilier lässt mir das auch durchgehen, nur kommt bei Gott nicht das Ergebnis raus, was ich erwartet hätte. Anscheinend multipliziere ich hier Adressen (oder was auch immer). Auf jeden Fall kommt immer das selbe Ergebnis raus, egal was in den Vectoren steht (naja... ich denke mal dass es dann die Adresse sein muss, weil die bleiben ja konstant, nur die Werte ändern sich eben..)</p>
<p>Nachdem ich mich heute ein wenig herumgespielt habe, kann ich die Werte, welche ich Multiplizieren will, so ausgeben:</p>
<pre><code class="language-cpp">ostringstream outs;
	outs &lt;&lt; p_old-&gt;dataVector[0] &lt;&lt; &quot; &quot; &lt;&lt; p-&gt;dataVector[0];
	cout &lt;&lt; outs.str().c_str();
</code></pre>
<p>Wenn ich aber so direkt multiplizieren will, dann mekert der Kompiler, dass ich keine float* multiplizieren kann/soll (hat er ja auch recht).</p>
<p>Was genau geht da vor sich?<br />
Kann mir das bitte mal jemand erklären?</p>
<p>Danke im voraus,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156304/kann-mir-jemand-folgendes-verhalten-bei-zeigern-erklären-brauche-wohl-nachhilfe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 20:24:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156304.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Aug 2006 16:19:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 16:19:15 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also das Problem ist an sich schon gelöst. Nur verstehe ich absolut nicht, warum das funktioniert und damit bringt mir das Kennen der Lösung absolut gar nichts!</p>
<p>Folgendes:<br />
Ich habe einen Vector mit Value-Zeigern definiert in der Klasse &quot;DataPacket&quot; definiert</p>
<pre><code class="language-cpp">vector&lt; Value* &gt; dataVector;
</code></pre>
<p>Jetzt wird der Vector mit float werten befüllt, dann per TCP verschickt und später wieder aufgenommen (alles noch in der Klasse DataPacket).</p>
<p>Jetzt will ich das erste Element zweier verschiedener Vectoren multiplizieren.<br />
Ich dachte mir, dass das ungefähr so gehen sollte:</p>
<pre><code class="language-cpp">((float) *(float*)(p_old-&gt;dataVector[0])) * ((float) *(float*)(p-&gt;dataVector[0]));
</code></pre>
<p>Der Kompilier lässt mir das auch durchgehen, nur kommt bei Gott nicht das Ergebnis raus, was ich erwartet hätte. Anscheinend multipliziere ich hier Adressen (oder was auch immer). Auf jeden Fall kommt immer das selbe Ergebnis raus, egal was in den Vectoren steht (naja... ich denke mal dass es dann die Adresse sein muss, weil die bleiben ja konstant, nur die Werte ändern sich eben..)</p>
<p>Nachdem ich mich heute ein wenig herumgespielt habe, kann ich die Werte, welche ich Multiplizieren will, so ausgeben:</p>
<pre><code class="language-cpp">ostringstream outs;
	outs &lt;&lt; p_old-&gt;dataVector[0] &lt;&lt; &quot; &quot; &lt;&lt; p-&gt;dataVector[0];
	cout &lt;&lt; outs.str().c_str();
</code></pre>
<p>Wenn ich aber so direkt multiplizieren will, dann mekert der Kompiler, dass ich keine float* multiplizieren kann/soll (hat er ja auch recht).</p>
<p>Was genau geht da vor sich?<br />
Kann mir das bitte mal jemand erklären?</p>
<p>Danke im voraus,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117711</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Tue, 15 Aug 2006 16:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 16:28:15 GMT]]></title><description><![CDATA[<p>Ist Value vom Typ DataPacket? Wie sieht diese Klasse denn aus?<br />
Bei einem</p>
<pre><code class="language-cpp">vector&lt; double* &gt; dataVector
</code></pre>
<p>würde man so multiplizieren</p>
<pre><code class="language-cpp">double res = *dataVector[i] * *dataVector[i+1];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1117716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117716</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 15 Aug 2006 16:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 16:37:35 GMT]]></title><description><![CDATA[<p>Nein, das hast du wohl falsch verstanden!</p>
<p>In der Klasse DataPacket befindet sich der vector. Die Inhalte des Vektors (die Value*) sind vom Typ FloatValue.<br />
Dabei fällt mir auf, dass hier das Problem liegen könnte... wie kann ich FloatValue in float verwandeln?</p>
<p>Naja, aber das was du geschrieben mit &quot;da würde man so multiplizieren&quot;... das habe ich ja eben versucht!</p>
<p>Der Vektor wurde wie folgt befüllt:</p>
<pre><code class="language-cpp">packet-&gt;dataVector.push_back( new FloatValue( atof(token) ) );
</code></pre>
<p>Niko</p>
<p>EDIT: Befüllen des Vektors hinzugefügt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117720</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Tue, 15 Aug 2006 16:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 16:38:19 GMT]]></title><description><![CDATA[<p>Dann zeig doch einfach mal die Deklaration von DataPacket, sonst kann man nur raten. Mich haben hier nur diese float-casts irritiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117724</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 15 Aug 2006 16:38:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 16:43:36 GMT]]></title><description><![CDATA[<p>Okay:</p>
<pre><code class="language-cpp">#include &quot;TBObject.h&quot;
#include &quot;Value.h&quot;
#include &quot;OutOfMemoryException.h&quot;

#include &lt;vector&gt;
#include &lt;sys/time.h&gt;

/// [core] Data packet.
/**
 * DataPacket is a container for Values belonging to a certain timestamp.
 * It contains a packet number and a timestamp. Both variables are set in
 * the constructor. The dataVector (containig the Values) can be accessed
 * directly (public).
 */
class DataPacket: public TBObject
{
	public:
		DataPacket();
		DataPacket( DataPacket &amp;p );
		DataPacket( DataPacket &amp;p, vector&lt;unsigned&gt; channels );
		virtual ~DataPacket();

		struct timeval timestamp;
		unsigned short seqNr;
		vector&lt; Value* &gt; dataVector;

		virtual void toString( ostream &amp;o );		///&lt; Print object to stream o.
//		virtual void toString( std::string *str );	///&lt; Prints the data to a string.

		/// Get a copy of the object.
		virtual DataPacket *clone();
		/// Get a copy of the object (selected channels only).
		virtual DataPacket *clone( vector&lt;unsigned&gt; channels );
		/// Append (move) Values from packet \a p.
		virtual void appendContentOf( DataPacket *p );
		/// Only keep selected channels (Values), delete others.
		virtual void narrowData( vector&lt;unsigned&gt; channels );
		/// delete all channels.
		virtual void empty();
		/// invalidate all values.
		virtual void invalidateValues();

	private:
		DataPacket( const DataPacket&amp; p ) {};	///&lt; No default copy constructor.
		static int counter;
		int number;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1117728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117728</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Tue, 15 Aug 2006 16:43:36 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 16:49:12 GMT]]></title><description><![CDATA[<p>Was ist denn Value (oder genauer FloatValue) für eine Klasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117732</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 15 Aug 2006 16:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 17:11:41 GMT]]></title><description><![CDATA[<p>Ahh <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Das war die richtige Frage. Im ersten Moment habe ich gedacht, dass das eine Standart-C++ Klasse ist, die ich einfach so umwandeln kann. Dabei ist das eine Klasse von dem Framework in dem ich grade arbeite.</p>
<p>In FloatValue selbst gibt es eine Funktion getFloat(), die ich benutzen kann.<br />
Die Lösung war also:</p>
<pre><code class="language-cpp">((FloatValue*) (p_old-&gt;dataVector[0]))-&gt;getFloat() * ((FloatValue*) (p-&gt;dataVector[0]))-&gt;getFloat();
</code></pre>
<p>Vielen Dank,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117749</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Tue, 15 Aug 2006 17:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 17:20:37 GMT]]></title><description><![CDATA[<p>Bitte lass mal diese Casts weg oder verwende wenigstens richtige C++Casts.<br />
Ich nehme mal an, dass Values die Basisklasse zu FloatValues ist. Ist da getFloat() auch schon drin? Dann kann man die Casts weglassen. Ansonsten besser static_cast&lt;FloatValue*&gt;.<br />
Was Values für eine Klasse ist, hatte ich eigentlich schon im ersten Post gefragt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117754</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 15 Aug 2006 17:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 17:55:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>okay... ohne Casts sieht das Ganze besser aus.<br />
Hatte vorher nicht daran Gedacht, dass Value auch ein getFloat beinhaltet (Value ist Oberklasse von FloatValue)</p>
<p>Was aber genau meintest du mit &quot;richtig C++ Casts&quot;. Ich kenne nur diese eine Art... (bin alter Java Programmierer)</p>
<p>MfG,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117777</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Tue, 15 Aug 2006 17:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Tue, 15 Aug 2006 18:06:33 GMT]]></title><description><![CDATA[<p>static_cast&lt;Datentyp&gt;<br />
const_cast&lt;Datentyp&gt;<br />
dynamic_cast&lt;Datentyp&gt;<br />
reinterpret_cast&lt;Datentyp&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1117782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1117782</guid><dc:creator><![CDATA[Antworter]]></dc:creator><pubDate>Tue, 15 Aug 2006 18:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Wed, 16 Aug 2006 08:08:53 GMT]]></title><description><![CDATA[<p>Hier noch was aus der FAQ<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39493.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39493.html</a><br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39463.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39463.html</a><br />
und einem Tutorial<br />
<a href="http://tutorial.schornboeck.net/reinterpret_cast.htm" rel="nofollow">http://tutorial.schornboeck.net/reinterpret_cast.htm</a><br />
<a href="http://tutorial.schornboeck.net/dynamic_cast.htm" rel="nofollow">http://tutorial.schornboeck.net/dynamic_cast.htm</a><br />
<a href="http://tutorial.schornboeck.net/casts.htm" rel="nofollow">http://tutorial.schornboeck.net/casts.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118039</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 16 Aug 2006 08:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Wed, 16 Aug 2006 10:19:13 GMT]]></title><description><![CDATA[<p>Niko1111 schrieb:</p>
<blockquote>
<p>...<br />
(bin alter Java Programmierer)</p>
<p>MfG,<br />
Niko</p>
</blockquote>
<p>Weswegen Du wohl auch<br />
- mit typisierten Containern etwas ungeübt bist und<br />
- offensichtlich gerne mit Wrapperklassen für eingebaute Typen arbeitest ...</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Nicht böse sein, will Dich nicht ärgern, sondern nur darauf hinweisen, dass die C++-Denke hier durchaus eine andere ist. Müssen wirklich in demselben vector-Objekt (zu Laufzeit) unterschiedliche Typen gehalten werden ? Gilt unter C++ als unfein/-sicher/-üblich/-nötig/- .... und ist es auch (unter Java) ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118173</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 16 Aug 2006 10:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Wed, 16 Aug 2006 19:25:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>naja, die Tatsache, dass verschiedene Typen zur Laufzeit in einem Vektor gehalten werden ist nicht von mir...<br />
... das war schon so in dem Framework, welches ich benutze (das ist nicht von mir programmiert).</p>
<p>Im Prinzip werden da aber auch nicht verschiedene Typen drin gehalten, sondern das sind eigentlich alles FloatValues. Das die Dekleration mit Value erfolgt ist... naja.. darüber kann man dann sicher treiten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>MfG,<br />
Niko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118695</guid><dc:creator><![CDATA[Niko1111]]></dc:creator><pubDate>Wed, 16 Aug 2006 19:25:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kann  mir jemand folgendes Verhalten bei Zeigern erklären (brauche wohl Nachhilfe) on Thu, 17 Aug 2006 13:13:18 GMT]]></title><description><![CDATA[<p>Niko1111 schrieb:</p>
<blockquote>
<p>Hi,<br />
...<br />
Im Prinzip werden da aber auch nicht verschiedene Typen drin gehalten, sondern das sind eigentlich alles FloatValues. Das die Dekleration mit Value erfolgt ist... naja.. darüber kann man dann sicher streiten...</p>
</blockquote>
<p>nö, braucht man gar nicht drüber zu streiten ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Wenn es unnötig ist, sollte man es lassen ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119190</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 17 Aug 2006 13:13:18 GMT</pubDate></item></channel></rss>