<?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 ein doppeltes Array]]></title><description><![CDATA[<p>Hallo,<br />
ich ein zweidimensionales Array (9 auf 9), und möchte in einer Funktion deren<br />
Werte ändern, d.h. ich brauche als Parameter einen Zeiger auf das<br />
zweidimensionale Array. Ohne Zeiger habe ich es schon geschaft:</p>
<pre><code class="language-cpp">void fill(int iFeld[][9]);

int main() {
   int feld[9][9];
   fill(feld);
   // ...
}
</code></pre>
<p>Aber wie geht das jetzt mit Zeiger? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205746/zeiger-auf-ein-doppeltes-array</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 14:22:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205746.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Feb 2008 16:21:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 16:21:17 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich ein zweidimensionales Array (9 auf 9), und möchte in einer Funktion deren<br />
Werte ändern, d.h. ich brauche als Parameter einen Zeiger auf das<br />
zweidimensionale Array. Ohne Zeiger habe ich es schon geschaft:</p>
<pre><code class="language-cpp">void fill(int iFeld[][9]);

int main() {
   int feld[9][9];
   fill(feld);
   // ...
}
</code></pre>
<p>Aber wie geht das jetzt mit Zeiger? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457624</guid><dc:creator><![CDATA[umfg]]></dc:creator><pubDate>Sun, 17 Feb 2008 16:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 16:31:36 GMT]]></title><description><![CDATA[<blockquote>
<p>ich ein zweidimensionales Array</p>
</blockquote>
<p>Hallo du 2 Dimensionales Feld. <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>
<p>Wenn du ein 2D - Feld mit einem Zeiger übergeben möchtest, wird das als 1 Dimensionales Feld &quot;angenommen&quot;</p>
<p>Musst also angeben, wie gross das Array ist.</p>
<pre><code>void foo (int* pArray, int length_1, int length_2);
</code></pre>
<p>Danach musst du hald ausrechnen, welches Element du willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457633</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 16:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 16:47:51 GMT]]></title><description><![CDATA[<p>Nope.</p>
<p>2D Felder haben immer noch in der 1. Dimension einen Zeiger auf die Zweite Version.</p>
<pre><code class="language-cpp">int feld[10][10];

int** a = feld;
int*  b = feld[0];
int   c = feld[0][0];
</code></pre>
<p>=&gt;</p>
<pre><code class="language-cpp">void foo(int**, size_t x, size_t y);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1457647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457647</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 17 Feb 2008 16:47:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 17:05:57 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>Nope.</p>
<p>2D Felder haben immer noch in der 1. Dimension einen Zeiger auf die Zweite Version.</p>
<pre><code class="language-cpp">int feld[10][10];

int** a = feld;
int*  b = feld[0];
int   c = feld[0][0];
</code></pre>
<p>=&gt;</p>
<pre><code class="language-cpp">void foo(int**, size_t x, size_t y);
</code></pre>
</blockquote>
<p>Ok, dann will ich mal funktionierenden Code sehen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457661</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 17:35:41 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>Nope.</p>
<p>2D Felder haben immer noch in der 1. Dimension einen Zeiger auf die Zweite Version.</p>
<pre><code class="language-cpp">int feld[10][10];

int** a = feld;
int*  b = feld[0];
int   c = feld[0][0];
</code></pre>
<p>=&gt;</p>
<pre><code class="language-cpp">void foo(int**, size_t x, size_t y);
</code></pre>
</blockquote>
<p>Bei 1000+ Beiträgen erwarte ich eigentlich, dass du gelegentlich auch mal andere Beiträge liest - dieser Unfug ist einigermaßen regelmäßig Thema in diesem Forum.</p>
<p>umfg schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich ein zweidimensionales Array (9 auf 9), und möchte in einer Funktion deren<br />
Werte ändern, d.h. ich brauche als Parameter einen Zeiger auf das<br />
zweidimensionale Array. Ohne Zeiger habe ich es schon geschaft:</p>
<pre><code class="language-cpp">void fill(int iFeld[][9]);

int main() {
   int feld[9][9];
   fill(feld);
   // ...
}
</code></pre>
<p>Aber wie geht das jetzt mit Zeiger? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Das ist bereits eine Variante mit Zeiger, auch wenn es vielleicht nicht so aussieht.</p>
<pre><code class="language-cpp">void fill(int iFeld[][9]); // ist äquivalent zu
void fill(int (*iFeld)[9]);
</code></pre>
<p>Es wird also bereits hier ein Zeiger auf ein Element von feld (welches zufällig selbst ein Array ist) übergeben. Es ist schlicht nicht möglich, Arrays als Kopie an Funktionen zu übergeben. Es gibt noch zwei weitere Möglichkeiten, bei denen dann keine Informationen über die Dimensionen verloren gehen (oder anders gesagt: du kannst den Funktionen keine Arrays mit anderen Dimensionen übergeben):</p>
<pre><code class="language-cpp">void fill(int (*iFeld)[9][9]);
// Aufruf:
fill(&amp;feld);
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">void fill(int (&amp;iFeld)[9][9]);
// Aufruf:
fill(feld);
</code></pre>
<p>Wobei die zweite Variante offensichtlich syntaktisch bequemer ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457673</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 17:46:28 GMT]]></title><description><![CDATA[<p>hmmm, aber da gibt es doch diesen char** pointer in main...</p>
<p>Dabei handelt es sich um ein Array aus Char-Arrays, also wo liegt da denn dann der Unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457682</guid><dc:creator><![CDATA[**argv]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 17:53:49 GMT]]></title><description><![CDATA[<blockquote>
<p>void fill(int (&amp;iFeld)[9][9]);<br />
// Aufruf:<br />
fill(feld);</p>
</blockquote>
<p>Das geht doch auch so:</p>
<pre><code>void fill(int iFeld[9][9]);
// Aufruf:
fill(feld);
</code></pre>
<p>@**argv</p>
<p>Ich denke, dass das dort ein Array von Zeigern auf char* ist. Also:</p>
<pre><code>char *argv[];

char** parg = (char**) &amp;argv;

std::cout &lt;&lt; pargv[0][0]; //Gibt dir den 1. Buchstaben des 1. Strings aus
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1457689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457689</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 17:53:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 18:00:33 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>... Es gibt noch zwei weitere Möglichkeiten, bei denen dann keine Informationen über die Dimensionen verloren gehen (oder anders gesagt: du kannst den Funktionen keine Arrays mit anderen Dimensionen übergeben):</p>
<pre><code class="language-cpp">void fill(int (*iFeld)[9][9]);
// Aufruf:
fill(&amp;feld);
</code></pre>
</blockquote>
<p>Das, *<em>int(<em>iFeld)[9][9]</em></em> ist ein Zeiger namens iFeld auf ein dreidimensionales int-Array(feld[][9][9]) <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/1457704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457704</guid><dc:creator><![CDATA[willy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 18:08:19 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das geht doch auch so:</p>
<pre><code>void fill(int iFeld[9][9]);
// Aufruf:
fill(feld);
</code></pre>
</blockquote>
<p><em>Es</em> geht auch. Ist aber nicht <em>das</em>. Bei dir ist iFeld ein Zeiger auf int[9], die Deklaration ist 100% gleichwertig zu der, die die erste Dimension auslässt, oder der, in welcher gleich ein Zeiger auftritt. In einer Funktionsdeklaration wird der Typ eines Arguments, welches <em>formal</em> ein Array ist (mit bekannter oder unspezifizierter Größe), in den eines Zeiger auf den Elementtyp angepasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457709</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 18:06:30 GMT]]></title><description><![CDATA[<p>willy schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>... Es gibt noch zwei weitere Möglichkeiten, bei denen dann keine Informationen über die Dimensionen verloren gehen (oder anders gesagt: du kannst den Funktionen keine Arrays mit anderen Dimensionen übergeben):</p>
<pre><code class="language-cpp">void fill(int (*iFeld)[9][9]);
// Aufruf:
fill(&amp;feld);
</code></pre>
</blockquote>
<p>Das, *<em>int(<em>iFeld)[9][9]</em></em> ist ein Zeiger namens iFeld auf ein dreidimensionales int-Array(feld[][9][9]) <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>Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457711</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 18:13:43 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Unsinn.</p>
</blockquote>
<p>Sachlich bleiben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457718</guid><dc:creator><![CDATA[willy]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 18:19:47 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Das geht doch auch so:</p>
<pre><code>void fill(int iFeld[9][9]);
// Aufruf:
fill(feld);
</code></pre>
</blockquote>
<p><em>Es</em> geht auch. Ist aber nicht <em>das</em>. Bei dir ist iFeld ein Zeiger auf int[9], die Deklaration ist 100% gleichwertig zu der, die die erste Dimension auslässt, oder der, in welcher gleich ein Zeiger auftritt. In einer Funktionsdeklaration wird der Typ eines Arguments, welches <em>formal</em> ein Array ist (mit bekannter oder unspezifizierter Größe), in den eines Zeiger auf den Elementtyp angepasst.</p>
</blockquote>
<p>Ahh, wenn ich das jetzt richtig verstehe, wird der Zeiger einfach implizit konvertiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457724</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 18:43:39 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Das geht doch auch so:</p>
<pre><code>void fill(int iFeld[9][9]);
// Aufruf:
fill(feld);
</code></pre>
</blockquote>
<p><em>Es</em> geht auch. Ist aber nicht <em>das</em>. Bei dir ist iFeld ein Zeiger auf int[9], die Deklaration ist 100% gleichwertig zu der, die die erste Dimension auslässt, oder der, in welcher gleich ein Zeiger auftritt. In einer Funktionsdeklaration wird der Typ eines Arguments, welches <em>formal</em> ein Array ist (mit bekannter oder unspezifizierter Größe), in den eines Zeiger auf den Elementtyp angepasst.</p>
</blockquote>
<p>Ahh, wenn ich das jetzt richtig verstehe, wird der Zeiger einfach implizit konvertiert.</p>
</blockquote>
<p>Welcher Zeiger? Womit wir es hier zu tun haben, sind Funktionsdeklarationen, die alle äquivalent sind - also ein und dieselbe Funktion deklarieren:</p>
<pre><code class="language-cpp">void fill(int (*iFeld)[9]);
void fill(int iFeld[][9]);
void fill(int iFeld[9][9]);
void fill(int iFeld[42][9]);
</code></pre>
<p>Der Parametertyp <em>dieser einen</em> Funktion ist int(*)[9] - also ein Zeiger auf ein Array aus 9 int.</p>
<p>P.S.<br />
- Arrays sind keine Zeiger.<br />
- Funktionsparameter sind niemals Arrays oder Funktionen.<br />
- Es ist möglich, bei der Deklaration von Funktionen für die Parameterdeklaration die Syntax von Array- bzw. Funktionsdeklarationen zu benutzen, dabei werden aber jeweils Zeigerparameter deklariert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457741</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Feb 2008 18:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 19:25:31 GMT]]></title><description><![CDATA[<p>Ich glaube wir haben aneinander vorbeigeredet.</p>
<p>Mit Zeiger meinte ich den Typfehler, der konvertiert wurde bei der Übergabe von</p>
<pre><code class="language-cpp">fill(feld);
</code></pre>
<p>Aber ist ja jetzt egal. <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/1457767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457767</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:25:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf ein doppeltes Array on Sun, 17 Feb 2008 19:30:41 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ich glaube wir haben aneinander vorbeigeredet.</p>
<p>Mit Zeiger meinte ich den Typfehler, der konvertiert wurde bei der Übergabe von</p>
<pre><code class="language-cpp">fill(feld);
</code></pre>
<p>Aber ist ja jetzt egal. <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>Grammatik ist auch in der natürlichen Sprache wichtig - hier wird kein Zeiger konvertiert, sondern <em>in</em> einen Zeiger konvertiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457771</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:30:41 GMT</pubDate></item></channel></rss>