<?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[Cast zwischen Struktur und Array]]></title><description><![CDATA[<p>Hi C++ Community!</p>
<p>Ist es in C++ möglich einen Cast zwischen einer Struktur und einem Array auszuführen, wenn beide die gleiche Anzahl an Elementen des gleichen Typs besitzen?</p>
<p>Also so etwas:</p>
<pre><code class="language-cpp">typedef struct MyVector3D {
	float x;
	float y;
	float z;
} MyVector3D;

int main(int argc, _TCHAR* argv[]) {
	float myArray[3] = {1.0f, 2.0f, 3.0f};
	MyVector3D myVec = {4.0f, 5.0f, 6.0f};

	MyVector3D myVec2 = myArray; // Error

	return 0;
}
</code></pre>
<p>Beste Grüße und eine schöne Adventszeit!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296568/cast-zwischen-struktur-und-array</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 20:10:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296568.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Dec 2011 12:09:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 12:09:31 GMT]]></title><description><![CDATA[<p>Hi C++ Community!</p>
<p>Ist es in C++ möglich einen Cast zwischen einer Struktur und einem Array auszuführen, wenn beide die gleiche Anzahl an Elementen des gleichen Typs besitzen?</p>
<p>Also so etwas:</p>
<pre><code class="language-cpp">typedef struct MyVector3D {
	float x;
	float y;
	float z;
} MyVector3D;

int main(int argc, _TCHAR* argv[]) {
	float myArray[3] = {1.0f, 2.0f, 3.0f};
	MyVector3D myVec = {4.0f, 5.0f, 6.0f};

	MyVector3D myVec2 = myArray; // Error

	return 0;
}
</code></pre>
<p>Beste Grüße und eine schöne Adventszeit!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154238</guid><dc:creator><![CDATA[Tafelwerk]]></dc:creator><pubDate>Wed, 07 Dec 2011 12:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 12:15:50 GMT]]></title><description><![CDATA[<p>Ja, das ist dir garantiert, dass das vom Layout her kompatibel ist. Aber ein reinterpret_cast ist trotzdem nötig. Und eine Zuweisung wie du das da versuchst, ist kein Cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154240</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 07 Dec 2011 12:15:50 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 12:16:09 GMT]]></title><description><![CDATA[<p>Nun ja, selbst wenn du das irgendwie casten könntest, ist nicht garantiert, dass das auch funktioniert, da nicht garantiert ist, dass die Member in einem struct direkt hintereinanderliegen. (Stichwort: Padding)<br />
Somit fällt leider auch die memcpy Lösung weg.<br />
Aber wozu genau brauchst du das? Ich würde einen Vektor übrigens eher mit float[3] und x() y() z() Memberfunktionen erstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154241</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 07 Dec 2011 12:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 12:35:19 GMT]]></title><description><![CDATA[<p>Derzeit greife ich häufig auf <strong>D3DXVECTOR3</strong> zurück.<br />
In vielen Situationen möchte man aber lieber mit einem <strong>float[3]</strong> Array arbeiten.</p>
<p>Das läuft jetzt wohl auf eine eigene Mathe Bibliothek hinaus. Irgendwelche Open Source Empfehlungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154249</guid><dc:creator><![CDATA[Tafelwerk]]></dc:creator><pubDate>Wed, 07 Dec 2011 12:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 12:45:27 GMT]]></title><description><![CDATA[<p>Tafelwerk schrieb:</p>
<blockquote>
<p>Das läuft jetzt wohl auf eine eigene Mathe Bibliothek hinaus. Irgendwelche Open Source Empfehlungen?</p>
</blockquote>
<p><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="😕"
    /> Wie kommst du denn jetzt von Struct-zu-Arrays-Casts zu Mathebibliotheken? Was soll die können? Welche Anforderungen soll sie erfüllen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154254</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 07 Dec 2011 12:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 12:47:45 GMT]]></title><description><![CDATA[<p>Ich sehe das Problem nicht, drei Variablen als Parameter zu übergeben ...<br />
Naja und es gibt ja noch die Möglichkeit, dass du ein float a[3] in eine<br />
Struktur packst ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154257</guid><dc:creator><![CDATA[Big Brother]]></dc:creator><pubDate>Wed, 07 Dec 2011 12:47:45 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 13:11:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3822">@Sepp</a>: Bisher nutze ich die Mathe-Bibliothek von DirectX und damit D3DXVECTOR3. Wenn ich nun D3DXVECTOR3 austauschen würde, wäre es sinnvoll auch die restlichen Abhängigkeiten von <em>d3dx10math.h</em> zu beenden.</p>
<p>Eine wichtige Anforderung an die Vektor-Repräsentation ist, dass sie leicht nach float[3] konvertiert werden kann.</p>
<p>Ist folgende Konvertierung sicher?</p>
<pre><code class="language-cpp">float* myArray2 = (float*)&amp;myVec;
</code></pre>
<p>Dann würde D3DXVECTOR3 auch weiterhin meine Bedürfnisse erfüllen. Es war etwas ungeschickt von mir, im vorherigen Beispiel den umgekehrten Fall aufzuführen.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154265</guid><dc:creator><![CDATA[Tafelwerk]]></dc:creator><pubDate>Wed, 07 Dec 2011 13:11:19 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 13:15:55 GMT]]></title><description><![CDATA[<p>Big Brother schrieb:</p>
<blockquote>
<p>Ich sehe das Problem nicht, drei Variablen als Parameter zu übergeben ...</p>
</blockquote>
<p>Wenn die drei Variablen zusammengehören wie in diesem Fall, ist das durchaus angebracht, sie auch zusammen durch die Gegend zu schubsen <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>
<blockquote>
<p>Naja und es gibt ja noch die Möglichkeit, dass du ein float a[3] in eine<br />
Struktur packst ...</p>
</blockquote>
<p>Das ändert nichts daran, dass D3DXVECTOR3 kein Array speichert und deshalb auch nicht in eins konvertiert werden kann - egal ob ein struct drumrum ist oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154270</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 07 Dec 2011 13:15:55 GMT</pubDate></item><item><title><![CDATA[Reply to Cast zwischen Struktur und Array on Wed, 07 Dec 2011 13:17:54 GMT]]></title><description><![CDATA[<p>Nein, die Konvertierung ist nicht sicher. Bzw. sie wäre sicher, wenn die DXlib ein Array nutzen würde, aber wenn sie das nicht tut, hast du genau das gleiche Problem wie vorher. Je nach dem was du brauchst, ist eine eigene Mathe-lib aber nicht sonderlich schwer. Wenn du den Vektor so baust, kann nichts schief gehen:</p>
<pre><code class="language-cpp">class Vector3f // Ist natürlich ein Template für Größe und Typ
{
  float data_[3];
public:
  ...
  // operator [] etc.
};

int main()
{
  Vector3f v(3, 4, 5);
  // Und dann Zugriff mit &amp;v[0]
}
</code></pre>
<p>Allerdings, wenn du dich mit DirectX eh auf Windows festlegst, werden vielleicht auch bestimmte Padding-Eigenschaften garantiert. (VS wird das auf jeden Fall machen.)<br />
Von daher könntest du auch einfach den Standard links liegen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154272</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 07 Dec 2011 13:17:54 GMT</pubDate></item></channel></rss>