<?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 mehrdimensionales Array]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bekomme einen Fehler, den ich nicht verstehe:</p>
<pre><code class="language-cpp">// Privates Attr. in einer Klasse
float	_mesh[4][3];

// Öffentlicher Zugriff
void	getMesh(float* mesh)	{ mesh = _mesh; };
</code></pre>
<p>Mein Compiler (VC8.0) sagt dazu:</p>
<blockquote>
<p>error C2440: '=' : cannot convert from 'float [4][3]' to 'float *'</p>
</blockquote>
<p>Bisher dachte ich, dass eine Feldvariable ohne Indizes immer einen Zeiger auf das Feld zurückgibt, was mit eindimensionalen Feldern auch klappt. Wieso funktioniert das nicht bei mehrdimensionalen Feldern?</p>
<p>BTW: Mit dem folgendem Kode läuft's:</p>
<pre><code class="language-cpp">void	getMesh(float* mesh)	{ mesh = &amp;_mesh[0][0]; };
</code></pre>
<p>Grüße,<br />
don_basto. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168364/zeiger-auf-mehrdimensionales-array</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 09:41:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168364.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Dec 2006 10:46:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Thu, 21 Dec 2006 10:46:27 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bekomme einen Fehler, den ich nicht verstehe:</p>
<pre><code class="language-cpp">// Privates Attr. in einer Klasse
float	_mesh[4][3];

// Öffentlicher Zugriff
void	getMesh(float* mesh)	{ mesh = _mesh; };
</code></pre>
<p>Mein Compiler (VC8.0) sagt dazu:</p>
<blockquote>
<p>error C2440: '=' : cannot convert from 'float [4][3]' to 'float *'</p>
</blockquote>
<p>Bisher dachte ich, dass eine Feldvariable ohne Indizes immer einen Zeiger auf das Feld zurückgibt, was mit eindimensionalen Feldern auch klappt. Wieso funktioniert das nicht bei mehrdimensionalen Feldern?</p>
<p>BTW: Mit dem folgendem Kode läuft's:</p>
<pre><code class="language-cpp">void	getMesh(float* mesh)	{ mesh = &amp;_mesh[0][0]; };
</code></pre>
<p>Grüße,<br />
don_basto. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195974</guid><dc:creator><![CDATA[don_basto]]></dc:creator><pubDate>Thu, 21 Dec 2006 10:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Thu, 21 Dec 2006 10:56:41 GMT]]></title><description><![CDATA[<p>don_basto schrieb:</p>
<blockquote>
<p>Bisher dachte ich, dass eine Feldvariable ohne Indizes immer einen Zeiger auf das Feld zurückgibt, was mit eindimensionalen Feldern auch klappt. Wieso funktioniert das nicht bei mehrdimensionalen Feldern?</p>
</blockquote>
<p>Weil diese Umwandlung Array -&gt; Pointer nur eindimensional verläuft - _mesh kann höchstens umgewandelt werden in einen <code>float* mesh[4]</code> (Zeiger auf float-Array), aber nicht in einen float*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195981</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Dec 2006 10:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Thu, 21 Dec 2006 14:13:51 GMT]]></title><description><![CDATA[<p>Deine Lösung funktioniert zwar CStoll, aber als elegant würde ich sie nicht bezeichnen, weil die Funktion dann nur mit Feldern arbeitet deren 2.Dimension 4 Werte umfasst.</p>
<p>Kennst du nicht noch eine andere Lösung, welche universeller ist?<br />
Irgendsoetwas wie:</p>
<pre><code class="language-cpp">vector&lt;verctor&lt;float&gt; &gt;
</code></pre>
<p>oder so?</p>
<p>PS: War kein Vorschlag -&gt; Keine Ahnung ob das funktioniert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196147</guid><dc:creator><![CDATA[|M|]]></dc:creator><pubDate>Thu, 21 Dec 2006 14:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Thu, 21 Dec 2006 15:52:05 GMT]]></title><description><![CDATA[<p>Oder boost::multi_array! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1196200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196200</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Thu, 21 Dec 2006 15:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 07:23:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9923">@M</a>: Das war kein Vorschlag, sondern eher eine Erklärung zur Array-Arithmetik <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>Und bessere Möglichkeiten wären u.a. dein verschachtelter vector, boost::multi_array oder im Ernstfall auch Doppelzeiger (oder man verwendet ein 1D-Feld und rechnet die Dimensionen von Hand um).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196431</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Dec 2006 07:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 08:10:11 GMT]]></title><description><![CDATA[<p>Jaja, siehs nicht als kritik!<br />
Ich hab schin gemerkt das du was drauf hast.</p>
<p>Könntest du das mit dem Doppelzeiger mal genauer erklären?<br />
Meinst du so was wie:</p>
<pre><code class="language-cpp">float **mesh
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1196451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196451</guid><dc:creator><![CDATA[|M|]]></dc:creator><pubDate>Fri, 22 Dec 2006 08:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 08:20:09 GMT]]></title><description><![CDATA[<p>Ja, sowas meinte ich.</p>
<p>Zusatzbemerkung: Das zweidimensionale Array lässt sich übrigens <strong>nicht</strong> implizit in so einen Doppelzeiger umwandeln. Das heißt, du müsstest da selber eine Indirektionsebene dazwischenbauen:</p>
<pre><code class="language-cpp">float mesh[4][3];
float (*mdata)[3]={mesh[0],...};
getMesh(mdata);
</code></pre>
<p>(Achtung Pseudocode - die ganze Syntax mit Pointern, Arrays und Kombinationen IST grauenhaft)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196461</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Dec 2006 08:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 14:20:58 GMT]]></title><description><![CDATA[<p>Danke, ich weis nicht ob das don_basto hilft, aber ich bin zumindest wieder etwas klüger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196678</guid><dc:creator><![CDATA[|M|]]></dc:creator><pubDate>Fri, 22 Dec 2006 14:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 14:50:28 GMT]]></title><description><![CDATA[<p>Danke für die Antworten. Es geht also grundsätzlich nicht. Was ist eigentlich der Grund?</p>
<p>Denn der Unterschied zwischen einem einem eindimensionalen und einem Mehrdimesionale Feld ist doch nur der Zugriff. Es wird doch immer der gleiche Speicher allokiert.</p>
<pre><code class="language-cpp">const int X = 4;
const int Y = 3; 

float mesh1[X*Y];
float mesh2[X][Y];

// Versteht der Compiler unter mehrdimensionalem Array sowas ???
typedef float[Y] vertex_type;
vertex_type mesh3[X];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1196690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196690</guid><dc:creator><![CDATA[don_basto]]></dc:creator><pubDate>Fri, 22 Dec 2006 14:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 15:49:18 GMT]]></title><description><![CDATA[<p>Also laut meinem bisschen Wissen:</p>
<p>Bei</p>
<pre><code class="language-cpp">float mesh1[X*Y];
</code></pre>
<p>wird zwar genausoviel Speicher reserviert wie bei</p>
<pre><code class="language-cpp">float mesh2[X][Y];
</code></pre>
<p>allerdings hast du die logische trennung übergangen und dein Quelltext ist ein Stück Verständlichkeit verlorengegangen.</p>
<p>Kann dir allerdings nicht sagen ob</p>
<pre><code class="language-cpp">float[Y]
</code></pre>
<p>überhaupt funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196707</guid><dc:creator><![CDATA[|M|]]></dc:creator><pubDate>Fri, 22 Dec 2006 15:49:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 16:19:35 GMT]]></title><description><![CDATA[<p>|M| schrieb:</p>
<blockquote>
<p>Kann dir allerdings nicht sagen ob</p>
<pre><code class="language-cpp">float[Y]
</code></pre>
<p>überhaupt funktioniert.</p>
</blockquote>
<p>Der Unsinn ist mir auch gerade aufgefallen. Aber ich wollte damit fragen, ob ein 2-dimensionales Feld aus einem einem Feld mit Zeigern auf ein eindimensionales Feld besteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196715</guid><dc:creator><![CDATA[don_basto]]></dc:creator><pubDate>Fri, 22 Dec 2006 16:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf mehrdimensionales Array on Fri, 22 Dec 2006 16:41:53 GMT]]></title><description><![CDATA[<p>Der Speicher von ein- und mehrdimensionalen Feld ist gleich:</p>
<pre><code class="language-cpp">int main()
{
	const int X = 4;
	const int Y = 3;

	float mesh1[X*Y];
	float mesh2[X][Y];
	int count = 0;

	for (int i=0; i&lt;X*Y; ++i)       mesh1[i] = (float) i;
	for (int i=0; i&lt;X; ++i)
		for (int j=0; j&lt;Y; ++j)     mesh2[i][j] = (float) count++ ;

	float* mesh1_ptr = mesh1;
	float* mesh2_ptr = &amp;mesh2[0][0];  // mesh2_ptr = mesh2 geht ja nicht

	for (int i=0; i&lt;X*Y; ++i) 
		std::cout &lt;&lt; *mesh1_ptr++ &lt;&lt; &quot;\t&quot; &lt;&lt; *mesh2_ptr++ &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>ergibt:</p>
<blockquote>
<p>0 0<br />
1 1<br />
2 2<br />
3 3<br />
4 4<br />
5 5<br />
6 6<br />
7 7<br />
8 8<br />
9 9<br />
10 10<br />
11 11</p>
</blockquote>
<p>Weil damit abgesehen von der Verwendung Indizes alles identisch ist, wundert's mich, dass der Compiler meckert, wenn ich einfach nur den Zeiger auf den Feldanfang haben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196726</guid><dc:creator><![CDATA[don_basto]]></dc:creator><pubDate>Fri, 22 Dec 2006 16:41:53 GMT</pubDate></item></channel></rss>