<?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[Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin auf ein ziemlich komplizierten Code gestoßen (worden); mit netten Spielereien die man, für mich als Anfänger, besonders mag, wie Funktionsübergaben über void-pointer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> :</p>
<pre><code class="language-cpp">struct aStructure 
{
    const unsigned short* const* element_1;
    int * const*                 element_2;
}

....

void aClass::someFunction(const void *inputData)
{
    const aStrukture * variable_1= static_cast&lt;const aStructure*&gt;(inputData);
    const unsigned short* const* variable_2 = aStructure-&gt;element_1;

    ....

    double ausgabevariable = variable2[i1][i2]
}
</code></pre>
<p>1. Wie müßte inputData aussehen?<br />
1.2 Welchen datentyp müßte es haben bzw. kann es durch das void* unterschiedlich sein? Ist es zewidimensional?? Ist element_1 zweidimensional???<br />
2. Wie schafft es der static_cast-Aufruf die Daten von inputData in element_1 zu laden?</p>
<p>(Verzeihung für laienhafte Formulierungen)</p>
<p>Ich nehmen jede Hilfe dankend an um das Wirrwar in meinem Kopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> zu ordnen (zumindest in dieser Ecke <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/288058/von-void-pointern-void-static_cast-s-und-strukturen-oder-auch-übergaben-mit-void-pointer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 04:12:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288058.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jun 2011 15:18:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer on Thu, 09 Jun 2011 15:18:55 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin auf ein ziemlich komplizierten Code gestoßen (worden); mit netten Spielereien die man, für mich als Anfänger, besonders mag, wie Funktionsübergaben über void-pointer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> :</p>
<pre><code class="language-cpp">struct aStructure 
{
    const unsigned short* const* element_1;
    int * const*                 element_2;
}

....

void aClass::someFunction(const void *inputData)
{
    const aStrukture * variable_1= static_cast&lt;const aStructure*&gt;(inputData);
    const unsigned short* const* variable_2 = aStructure-&gt;element_1;

    ....

    double ausgabevariable = variable2[i1][i2]
}
</code></pre>
<p>1. Wie müßte inputData aussehen?<br />
1.2 Welchen datentyp müßte es haben bzw. kann es durch das void* unterschiedlich sein? Ist es zewidimensional?? Ist element_1 zweidimensional???<br />
2. Wie schafft es der static_cast-Aufruf die Daten von inputData in element_1 zu laden?</p>
<p>(Verzeihung für laienhafte Formulierungen)</p>
<p>Ich nehmen jede Hilfe dankend an um das Wirrwar in meinem Kopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> zu ordnen (zumindest in dieser Ecke <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2075821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075821</guid><dc:creator><![CDATA[trolloo]]></dc:creator><pubDate>Thu, 09 Jun 2011 15:18:55 GMT</pubDate></item><item><title><![CDATA[Reply to Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer on Thu, 09 Jun 2011 15:23:29 GMT]]></title><description><![CDATA[<p>Sorry, ich dachte ich wäre eingelogt (hab mich eben erst registriert). Das da oben ist von mir.<br />
Hallo nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075827</guid><dc:creator><![CDATA[yumarge]]></dc:creator><pubDate>Thu, 09 Jun 2011 15:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer on Thu, 09 Jun 2011 15:28:41 GMT]]></title><description><![CDATA[<p>Das da oben ist wildes C-Style Poitnergecaste mit Doppelpointern usw. Wenn du das nicht unbedingt jetzt schon brauchst, leg es beiseite und schaus dir in ein paar Monaten nochmal an <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 />
Mal im Ernst: Wenn ich sowas in Code sehen würde, mit dem ich arbeiten muss, würd ich den Verantwortlichen mit wilden void-Pointern erschießen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075833</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 09 Jun 2011 15:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer on Thu, 09 Jun 2011 15:40:28 GMT]]></title><description><![CDATA[<p>Typsicherheit ist ein zentrales Feature von C++. Void-Pointer haben diese Sicherheit nicht. Nach Möglichkeit immer vermeiden und die &quot;richtigen&quot; Typen nehmen. Zur Not kann man sich mit einem Interface behelfen das versch. Klassen (auch ein Typ) verwenden, damit man auch unterschiedliche Klassen übergeben kann.</p>
<p>Aus der Luft gegriffenes Beispiel:</p>
<pre><code class="language-cpp">class Interface 
{
public:
   virtual void foobar() = 0;
};

class foo : public Interface
{
public:
   virtual void foobar() { std::cout &lt;&lt; &quot;class foo&quot; &lt;&lt; std::endl; }
};

class bar : public Interface
{
public:
   virtual void foobar() { std::cout &lt;&lt; &quot;class bar&quot; &lt;&lt; std::endl; }
};

void eineFunktion(Interface&amp; p)
{
   p.foobar();
}

int main()
{
   foo a;
   bar b;
   eineFunktion(a);
   eineFunktion(b);  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2075843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075843</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 09 Jun 2011 15:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer on Thu, 09 Jun 2011 15:45:25 GMT]]></title><description><![CDATA[<p>Ich würde das doch gern verstehen. Ich vermute man kann, so verwirrend es auch sein mag, einiges daraus lernen.<br />
Irgendwo hab ich gelesen, dass für den void Zeiger so viel Speicher reserviert wird wie für gängige Datentypen maximal erforderlich ist. Übergibt man dann (am Schluss) deshalb den Wert an eine double Variable weil man den Wert (falls es eine Zahl sein sollte?) ohne verlusste abspeichert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075848</guid><dc:creator><![CDATA[yumarge]]></dc:creator><pubDate>Thu, 09 Jun 2011 15:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to Von void-Pointern(void*), static_cast´s und Strukturen. Oder auch: Übergaben mit void-pointer on Thu, 09 Jun 2011 15:50:03 GMT]]></title><description><![CDATA[<p>yumarge schrieb:</p>
<blockquote>
<p>Ich würde das doch gern verstehen. Ich vermute man kann, so verwirrend es auch sein mag, einiges daraus lernen.<br />
Irgendwo hab ich gelesen, dass für den void Zeiger so viel Speicher reserviert wird wie für gängige Datentypen maximal erforderlich ist. Übergibt man dann (am Schluss) deshalb den Wert an eine double Variable weil man den Wert (falls es eine Zahl sein sollte?) ohne verlusste abspeichert?</p>
</blockquote>
<p>Der Zeiger selbst ist auf gängigen Systemen nur 4 Bytes groß. Kannst du auch mit sizeof(void*) rausfinden. Er kann nur auf alles mögliche zeigen.<br />
Und man &quot;speichert&quot; das ja nicht &quot;in dem Zeiger&quot; ab, da ist nur die Adresse hinterlegt, man &quot;biegt&quot; den Zeiger nur auf eine Stelle im Speicher wo man weiss, dass da etwas liegt das einem gehört.<br />
Wie groß dieser Bereich am Ende ist, ist nirgendswo hinterlegt. Du kannst auch in die Mitte eines Arrays zeigen. Oder ans Ende.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075849</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 09 Jun 2011 15:50:03 GMT</pubDate></item></channel></rss>