<?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[[gelöst] C reinterpret_cast]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe mal wieder eine wahrscheinlich ziemlich dumme Frage:</p>
<p>In <a href="http://www.gnu.org/software/gsl/manual/html_node/Providing-the-function-to-solve.html#Providing-the-function-to-solve" rel="nofollow">diesem Beispiel der GSL</a> stehen ziemlich zu Beginn die Zeilen.</p>
<pre><code class="language-cpp">struct my_f_params { double a; double b; double c; };

double
my_f (double x, void * p) {
   struct my_f_params * params = (struct my_f_params *)p;
   double a = (params-&gt;a);
   double b = (params-&gt;b);
   double c = (params-&gt;c);

   return  (a * x + b) * x + c;
}
</code></pre>
<p>Was soll mir dabei Zeile 5 sagen? Ich möchte einen Pointer namens params der Struktor <code>my_f_params</code> und er kriegt die Adresse von ...?<br />
Warum steht da nicht einfach <code>p</code> , sondern schon wieder der Typ, nämlich <code>struct my_f_params*</code> .<br />
Ist das eine Art typ cast? Ich würde 'heute' dann schreiben:</p>
<pre><code class="language-cpp">my_f_params* params = reinterpret_cast&lt;my_f_params*&gt;(p)
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321937/gelöst-c-reinterpret_cast</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 20:29:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321937.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Nov 2013 12:48:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] C reinterpret_cast on Fri, 29 Nov 2013 13:16:46 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>ich habe mal wieder eine wahrscheinlich ziemlich dumme Frage:</p>
<p>In <a href="http://www.gnu.org/software/gsl/manual/html_node/Providing-the-function-to-solve.html#Providing-the-function-to-solve" rel="nofollow">diesem Beispiel der GSL</a> stehen ziemlich zu Beginn die Zeilen.</p>
<pre><code class="language-cpp">struct my_f_params { double a; double b; double c; };

double
my_f (double x, void * p) {
   struct my_f_params * params = (struct my_f_params *)p;
   double a = (params-&gt;a);
   double b = (params-&gt;b);
   double c = (params-&gt;c);

   return  (a * x + b) * x + c;
}
</code></pre>
<p>Was soll mir dabei Zeile 5 sagen? Ich möchte einen Pointer namens params der Struktor <code>my_f_params</code> und er kriegt die Adresse von ...?<br />
Warum steht da nicht einfach <code>p</code> , sondern schon wieder der Typ, nämlich <code>struct my_f_params*</code> .<br />
Ist das eine Art typ cast? Ich würde 'heute' dann schreiben:</p>
<pre><code class="language-cpp">my_f_params* params = reinterpret_cast&lt;my_f_params*&gt;(p)
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368907</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 29 Nov 2013 13:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] C reinterpret_cast on Fri, 29 Nov 2013 12:55:50 GMT]]></title><description><![CDATA[<p>static_cast nicht reinterpret_cast</p>
<p>In C wäre dieser Cast sogar garnicht notwendig.</p>
<p>PS:<br />
Der Grund für diese Zeile ist vermutlich ein vorgegebenes Interface. Wenn du zB wie bei qsort() ein generisches Callback angeben muss, gehen die Typinformationen ja verloren. Dazu brauchst du dann den void* der quasi nur die Adresse der Daten beinhaltet die du übergeben willst - und mittels cast holst du dir dann ein Objekt mit dem du arbeiten kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368909</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 29 Nov 2013 12:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] C reinterpret_cast on Fri, 29 Nov 2013 13:07:51 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Der Grund für diese Zeile ist vermutlich ein vorgegebenes Interface.</p>
</blockquote>
<p>Das vermute ich auch.</p>
<p>Ich habe den Eindruck, dass bei C++ (salopp formuliert) der Typ stets mit angegeben werden muss. Ruft eine Funktion die Variable a auf, so muss schon im Prototyp stehen foo(int/double a).</p>
<p>Und so will C++ scheinbar auch bei Pointern wissen: &quot;Pointer auf welchen Typ?&quot;</p>
<p>Dieser void Pointer scheint eine Art Notnagel zu sein: &quot;Es ist eine Adresse auf ... etwas.&quot;</p>
<p>Und für das Interface wie die GSL muss ich jetzt aber in der Funktion wieder klar machen, dass dieser Pointer auf einen Typ zeigt, den die GSL erwartet, also muss ich einen typ cast nachschieben.</p>
<p>Kann man das so ungefähr sagen?</p>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368915</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 29 Nov 2013 13:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] C reinterpret_cast on Fri, 29 Nov 2013 13:15:11 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Kann man das so ungefähr sagen?</p>
</blockquote>
<p>Ja.</p>
<p>Wobei ich statt &quot;Notnagel&quot; eher &quot;generisch&quot; sagen würde. void* ist einfach nur eine Adresse ohne Typinformation.</p>
<p>Aber das sind semantics...</p>
<p>Als beispiel:<br />
int* p;<br />
hier kann ich ++p; machen weil ich ja weiss wie breit ein int ist und weiviele Bytes ich weiter gehen muss um den nächsten int zu bekommen.<br />
void* p;<br />
hier kann ich kein ++p; machen, da ich nicht weiss wie breit die Daten sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368919</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 29 Nov 2013 13:15:11 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] C reinterpret_cast on Fri, 29 Nov 2013 13:16:30 GMT]]></title><description><![CDATA[<p>Alles klar, vielen Dank! <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>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2368920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2368920</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Fri, 29 Nov 2013 13:16:30 GMT</pubDate></item></channel></rss>