<?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[mehrdimensionale Felder]]></title><description><![CDATA[<p>ich bin neu im forum und lerne c++.</p>
<p>meine frage:<br />
im meinem Buch(c++ Programmierung lernen) steht das hier:</p>
<p>int [6][8]<br />
a[x][y]=3</p>
<p>dann rechnet c++ die zwei Indizies auf einen um:<br />
a[x*8+y]=3 // Diese Berechnung versteh ich überhaupt nicht.</p>
<p>kann mir jemand die &quot;interne verwaltung mehrdimensionaler Felder&quot; anhand eins Beispiels erklären bitte ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276510/mehrdimensionale-felder</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 10:18:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276510.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Nov 2010 16:21:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mehrdimensionale Felder on Wed, 03 Nov 2010 16:35:01 GMT]]></title><description><![CDATA[<p>ich bin neu im forum und lerne c++.</p>
<p>meine frage:<br />
im meinem Buch(c++ Programmierung lernen) steht das hier:</p>
<p>int [6][8]<br />
a[x][y]=3</p>
<p>dann rechnet c++ die zwei Indizies auf einen um:<br />
a[x*8+y]=3 // Diese Berechnung versteh ich überhaupt nicht.</p>
<p>kann mir jemand die &quot;interne verwaltung mehrdimensionaler Felder&quot; anhand eins Beispiels erklären bitte ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974710</guid><dc:creator><![CDATA[gamemaker83]]></dc:creator><pubDate>Wed, 03 Nov 2010 16:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Wed, 03 Nov 2010 16:42:40 GMT]]></title><description><![CDATA[<p>Die exakte Art und Weise kann ich dir nicht erklären aber:</p>
<p>Der Hauptspeicher des Rechners ist nicht mehrdimensional, dH. dein mehrdimensionales Array muss auf eine Dimension abgebildet werden.</p>
<p>Da die Daten in einem Array sequentiell (hintereinander im Arbeitsspeicher) abgelegt werden, muss eine &quot;formel&quot; benutzt werden um zur nächsten dimension zu kommen.</p>
<p>zB,</p>
<p>int[3,4]</p>
<p>[1,2,3,4]<br />
[5,6,7,8]<br />
[9,10,11,12]</p>
<p>Hier oben siehst du 2 Dimensionen (ergo eine Tabelle)</p>
<p>im RAM sieht das aber so aus:</p>
<p>[1,2,3,4,5,6,7,8,9,10,11,12]</p>
<p>Wenn du jetzt a[1][2] aufrufst, muss das programm berechnen, wo sich der Wert befindet.</p>
<p>Welche &quot;Formel&quot; verwendet wird um auf einen Index umzurechnen hängt von der Anzahl der Dimensionen, Der maximalen Indizies pro Dimension und natürlich von der Größe des Datentyps ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974726</guid><dc:creator><![CDATA[TheQ]]></dc:creator><pubDate>Wed, 03 Nov 2010 16:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Wed, 03 Nov 2010 16:46:31 GMT]]></title><description><![CDATA[<p>Da wirds erklärt: <a href="http://www.cplusplus.com/doc/tutorial/arrays/" rel="nofollow">cplusplus.com: Arrays</a></p>
<p>Link schrieb:</p>
<blockquote>
<p>Multidimensional arrays are just an abstraction for programmers, since we can obtain the same results with a simple array just by putting a factor between its indices:</p>
<pre><code class="language-cpp">int jimmy [3][5];   // is equivalent to
int jimmy [15];     // (3 * 5 = 15)
</code></pre>
<p>With the only difference that with multidimensional arrays the compiler remembers the depth of each imaginary dimension for us.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1974727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974727</guid><dc:creator><![CDATA[multiarrionär]]></dc:creator><pubDate>Wed, 03 Nov 2010 16:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Wed, 03 Nov 2010 19:16:48 GMT]]></title><description><![CDATA[<p>Die Formel ist nicht x * y, denn da kommt man ja bei vertauschen Indexen auf gleiches Ergebnis (a[3][5] == a[5][3] weil 3 * 5 == 5 * 3 == 15). Richtig ist <code>(y * x_ausdehnung) + x</code> .<br />
Es hilft immer sich die Sache vorzustellen/aufzuzeichnen:</p>
<pre><code>[11][3]
  0 1 2 3 4 5 6 7 8 9 10 - x
0 X X X X X X X X X X X
1 X X X X X X + X X X X
2 X X X X X X X X X X X
|
y
</code></pre>
<p>Das '+' hat Position 6|1, d.h es ist im 18. Feld (Index 17, weil die Zählung bei 0 beginnt)<br />
-&gt;Berechnung</p>
<pre><code>Feld mit '+':  1 * 11     + 6 = 17
Allgemein:     y * Breite + x = Feld-Nr.
</code></pre>
<p>Logisch, denn 1 Reihe zu 11 Feldern + 6 (das 6. Feld der 2. Reihe), bzw.<br />
y-1 Reihen zu x_ausdehnung/breite Feldern + das x (das x.Feld in der y. Reihe).</p>
<p>Ich hoffe das war jetzt nicht zu konfus erklärt. <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/1974799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974799</guid><dc:creator><![CDATA[Oberon_0]]></dc:creator><pubDate>Wed, 03 Nov 2010 19:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Wed, 03 Nov 2010 19:27:43 GMT]]></title><description><![CDATA[<p>danke für die erklärungen<br />
jetzt hab ichs verstanden<br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1974805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974805</guid><dc:creator><![CDATA[gamemaker83]]></dc:creator><pubDate>Wed, 03 Nov 2010 19:27:43 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Wed, 03 Nov 2010 20:02:13 GMT]]></title><description><![CDATA[<p>Oberon_0 schrieb:</p>
<blockquote>
<p>Die Formel ist nicht x * y, denn da kommt man ja bei vertauschen Indexen auf gleiches Ergebnis (a[3][5] == a[5][3] weil 3 * 5 == 5 * 3 == 15).</p>
</blockquote>
<p>Du musst es im Kontext betrachten. Es ging in dem gezeigten Code um die Deklaration (deshalb steht ja auch ein int davor) und da ist a[3][5] und a[5][3] gleich lang.<br />
Vielleicht habe ich einen unpassenden Teil von dem Artikel zitiert, aber Genaueres erfährt man ja beim Lesen des selbigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1974834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974834</guid><dc:creator><![CDATA[multiarrionär]]></dc:creator><pubDate>Wed, 03 Nov 2010 20:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Thu, 04 Nov 2010 08:01:52 GMT]]></title><description><![CDATA[<p>gamemaker83 schrieb:</p>
<blockquote>
<p>kann mir jemand die &quot;interne verwaltung mehrdimensionaler Felder&quot; anhand eins Beispiels erklären bitte ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Es ist noch zu erwähnen, daß es zwei mögliche Varianten gibt Multidimensionale Felder im Speicher abzulegen. C und C++ verwenden die row-major order Fortran die column-major order.<br />
C legt eine Matrix Zeilenweise im Ram ab, Fortran speichert eine Matrix spaltenweise.<br />
Die folgende Matrix wird wie folgt gespeichert</p>
$$\begin{bmatrix}  
1 & 2 & 3 \\  
4 & 5 & 6 \\  
7 & 8 & 9  
\end{bmatrix}$$
<p>C:<br />
index = dim(columns)*row+column<br />
Die Reihenfolge im Speicher ist:</p>
$\[1,2,3,4,5,6,7,8,9\]$

<p>Fortran:<br />
index = row+dim(row)*column<br />
Die Reihenfolge im Speicher ist:</p>
$\[1,4,7,2,5,8,3,6,9\]$

]]></description><link>https://www.c-plusplus.net/forum/post/1974935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974935</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Thu, 04 Nov 2010 08:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to mehrdimensionale Felder on Thu, 04 Nov 2010 09:03:00 GMT]]></title><description><![CDATA[<p>gamemaker83 schrieb:</p>
<blockquote>
<p>meine frage:<br />
im meinem Buch(c++ Programmierung lernen) steht das hier:</p>
<p>int a[6][8];<br />
a[x][y]=3;</p>
<p>dann rechnet c++ die zwei Indizies auf einen um:<br />
a[x*8+y]=3; // Diese Berechnung versteh ich überhaupt nicht.</p>
</blockquote>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox46597" checked="true" /><label for="checkbox46597">eines der 8-elementigen Feldern ausgewählt und mit dem [y] eines der Elemente dieses Feldes. Da die ints alle hintereinander im Speicher stehen, kann man die Positions des ints relativ zum Feld-Anfang über 8*x+y ausrechnen.</label></div></p>
<pre><code>_____a[0]____   _____a[1]____   _____a[2]____   _...
 /             \ /             \ /             \ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...
| | | | | | | | | | | | | | | | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...
                 |                         |
                 |                         |
              a[1][0]                   a[2][5]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1974949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1974949</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 04 Nov 2010 09:03:00 GMT</pubDate></item></channel></rss>