<?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[2D Array an Funktion übergeben]]></title><description><![CDATA[<p>Hi ich hoffe das ist die richtige Kategorie für das Thema.</p>
<p>Ich hab zwei vorgegebene Funktionköpfe:</p>
<pre><code class="language-cpp">void mul(double* m1[4][4], double* m2[4][4], double* result[4][4])

void add(double* m1[4][4], double* m2[4][4], double* result[4][4])
</code></pre>
<p>ich soll also aus meinem Hauptprgoramm drei 2D Felder übergeben aber ich bekomm es einfach net hin. Wie würde ein Bsp. aussehen wenn ich z.B:</p>
<pre><code class="language-cpp">double m1[4][4], m2[4][4], res[4][4];
</code></pre>
<p>die drei Felder hab und Sie an die Funktion &quot;mul&quot; übergeben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/166918/2d-array-an-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 15:24:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166918.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Dec 2006 13:10:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:10:26 GMT]]></title><description><![CDATA[<p>Hi ich hoffe das ist die richtige Kategorie für das Thema.</p>
<p>Ich hab zwei vorgegebene Funktionköpfe:</p>
<pre><code class="language-cpp">void mul(double* m1[4][4], double* m2[4][4], double* result[4][4])

void add(double* m1[4][4], double* m2[4][4], double* result[4][4])
</code></pre>
<p>ich soll also aus meinem Hauptprgoramm drei 2D Felder übergeben aber ich bekomm es einfach net hin. Wie würde ein Bsp. aussehen wenn ich z.B:</p>
<pre><code class="language-cpp">double m1[4][4], m2[4][4], res[4][4];
</code></pre>
<p>die drei Felder hab und Sie an die Funktion &quot;mul&quot; übergeben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186825</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:10:26 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:24:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">double m1[4][4], m2[4][4], res[4][4];
mul(m1,m2,res);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1186843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186843</guid><dc:creator><![CDATA[kA]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:27:54 GMT]]></title><description><![CDATA[<p>Ja das hat ich probiert da kommt das :</p>
<p>error C2664: 'mul': Konvertierung des Parameters 1 von 'double [4][4]' in 'double *' nicht möglich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186846</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:29:40 GMT]]></title><description><![CDATA[<p>Dieses ultimativ-große Programm kann mein g++ kompilieren:</p>
<pre><code class="language-cpp">double d1[4][4], d2[4][4], d3[4][4];
void mul(double d1[4][4], double d2[4][4], double d3[4][4])
{
}
int main ()
{
mul(d1,d2,d3);
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1186848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186848</guid><dc:creator><![CDATA[kA]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:33:53 GMT]]></title><description><![CDATA[<p>das liegt wohl daran das du im funktionskopf die &quot;*&quot;chen vergessen hast</p>
<pre><code>void mul(double[b]*[/b] m1[4][4], double[b]* [/b]m2[4][4], double[b]* [/b]result[4][4])

void add(double* m1[4][4], double* m2[4][4], double* result[4][4])
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1186855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186855</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:34:48 GMT]]></title><description><![CDATA[<p>Wasn jetz?</p>
<p>Wiso willst du pointer benutzen?<br />
Ich würde die ganze funktion eh komplett anders schreiben...</p>
<p>...aber soooo, neimals...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186858</guid><dc:creator><![CDATA[kA]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:36:30 GMT]]></title><description><![CDATA[<p>kA schrieb:</p>
<blockquote>
<p>Wasn jetz?</p>
<p>Wiso willst du pointer benutzen?<br />
Ich würde die ganze funktion eh komplett anders schreiben...</p>
<p>...aber soooo, neimals...</p>
</blockquote>
<p>edit: aso, is vorgegeben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186862</guid><dc:creator><![CDATA[kA]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:38:09 GMT]]></title><description><![CDATA[<p>richtig <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="😉"
    /> es ist vorgegeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186867</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 13:43:12 GMT]]></title><description><![CDATA[<p>Hehe... so kompilierts meiner...</p>
<p>...aber ob du was damit anfangen kannst, kA xD</p>
<pre><code class="language-cpp">double d1[4][4], d2[4][4], d3[4][4];
void mul(double *d1[4][4], double *d2[4][4], double *d3[4][4])
{
}
int main ()
{
mul((double *(*)[4]) d1, (double *(*)[4]) d2, (double *(*)[4]) d3);
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1186875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186875</guid><dc:creator><![CDATA[kA]]></dc:creator><pubDate>Mon, 04 Dec 2006 13:43:12 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 14:09:00 GMT]]></title><description><![CDATA[<p>Wenn man reinterpret_cast nicht mag und nicht vorgeschrieben ist, wie die Variablen deklariert werden sollen:</p>
<pre><code class="language-cpp">double *d1[4], *d2[4], *d3[4];
void mul(double *d1[4][4], double *d2[4][4], double *d3[4][4])
{
}
int main ()
{
    //2D-Arrays initialisieren
    mul(&amp;d1, &amp;d2, &amp;d3);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1186908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186908</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Mon, 04 Dec 2006 14:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 14:22:01 GMT]]></title><description><![CDATA[<p>kA schrieb:</p>
<blockquote>
<p>Hehe... so kompilierts meiner...</p>
<p>...aber ob du was damit anfangen kannst, kA xD</p>
<pre><code class="language-cpp">double d1[4][4], d2[4][4], d3[4][4];
void mul(double *d1[4][4], double *d2[4][4], double *d3[4][4])
{
}
int main ()
{
mul((double *(*)[4]) d1, (double *(*)[4]) d2, (double *(*)[4]) d3);
return 0;
}
</code></pre>
</blockquote>
<p>Hm da bekomm ich schon mal die Startadresse und er macht ein 2D Array daraus, aber die Werte die dann in dem Array stehen passen nicht.</p>
<p>@schorsch code naja die funktion mul steht in ner anderen Datei von daher klappt das mit der globalen Deklaration nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186924</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 14:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 14:32:38 GMT]]></title><description><![CDATA[<p>pad8626 schrieb:</p>
<blockquote>
<p>@schorsch code naja die funktion mul steht in ner anderen Datei von daher klappt das mit der globalen Deklaration nicht</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="😕"
    /> Was hat die &quot;andere Datei&quot; mit einer globalen Deklaration für ein Problem?<br />
<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="😕"
    /> Welche Rolle spielt es für den Aufruf, dass die Variablendeklaration <strong>beispielshalber</strong> global ist?<br />
<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="😕"
    /> Ist die Deklaration in kAs Beispiel nicht ebenso global?<br />
<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="😕"
    /> Was sagt der Compiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186934</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Mon, 04 Dec 2006 14:32:38 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 14:55:10 GMT]]></title><description><![CDATA[<p>pad8626 schrieb:</p>
<blockquote>
<p>Hi ich hoffe das ist die richtige Kategorie für das Thema.</p>
<p>Ich hab zwei vorgegebene Funktionköpfe:</p>
<pre><code class="language-cpp">void mul(double* m1[4][4], double* m2[4][4], double* result[4][4])

void add(double* m1[4][4], double* m2[4][4], double* result[4][4])
</code></pre>
<p>ich soll also aus meinem Hauptprgoramm drei 2D Felder übergeben aber ich bekomm es einfach net hin. Wie würde ein Bsp. aussehen wenn ich z.B:</p>
<pre><code class="language-cpp">double m1[4][4], m2[4][4], res[4][4];
</code></pre>
<p>die drei Felder hab und Sie an die Funktion &quot;mul&quot; übergeben will.</p>
</blockquote>
<p>Das geht nicht. Deine Variablen sind 2-dimensionale Arrays mit dem <strong>Elementtyp double</strong>. Die Funktionen erwarten dagegen 2-dimensionale Arrays (genauer: Pointer auf eindimensionale Arrays, aber dieser Unterschied spielt hier keine Rolle) mit dem <strong>Elementtyp Pointer auf double</strong>. Die Aufgabe muss hier scheitern, und kein noch so kreatives und sinnfreies Herumcasten wird daran etwas ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186952</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 04 Dec 2006 14:55:10 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 14:55:15 GMT]]></title><description><![CDATA[<p>ich hab mir mal ein test programm geschrieben</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

using namespace std;

void test(double* [4][4]);

void main()
{

	double m1[4][4]={1,2,3,4,5,6,7,8,9,1,2,3,5,1,1,1};
	double* m1P = &amp;m1[0][0];

	for(int i=0; i&lt;16; i++)
	{
		printf(&quot;%p %lf\n&quot;,m1P,*m1P++);
	}

	printf(&quot;\n\n&quot;);

	test((double*(*)[4])m1);
}

void test(double* m1P[4][4])
{

	for(int i=0; i&lt;16; i++)
	{
		printf(&quot;%p %lf\n&quot;,m1P,*m1P++);
	}
	_getch();
}
</code></pre>
<p>So wie gesagt funtzt so weit nur die werte stimme nicht</p>
<p>Und hier ist es wie es in der aufgabe sein soll</p>
<p>Matrix.h</p>
<pre><code class="language-cpp">#ifndef MATRIX_H 
#define MATRIX_H

void mul(double* [4][4] , double* [4][4], double* [4][4]);
void add(double* [4][4], double* [4][4], double* [4][4]); 

#endif
</code></pre>
<p>Matrix.cpp</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

void mul(double* m1[4][4], double* m2[4][4], double* [4][4])
{

}

void add(double* m1[4][4], double* m2[4][4], double* [4][4])
{

}
</code></pre>
<p>Programm</p>
<pre><code class="language-cpp">...

double m1[4][4]={1}, m2[4][4]={1}, res[4][4]={1};

		system(&quot;cls&quot;);

		printf(&quot;Matrix\
              \n======\n\n&quot;);

		mul( (double*(*)[4])m1 , (double*(*)[4])m2 , (double*(*)[4])res);        

...
</code></pre>
<p>So da funktioniert das von KA aber die Werte stimmen halt nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186953</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 14:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 14:59:58 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>pad8626 schrieb:</p>
<blockquote>
<p>Hi ich hoffe das ist die richtige Kategorie für das Thema.</p>
<p>Ich hab zwei vorgegebene Funktionköpfe:</p>
<p><em><em>```cpp<br />
void mul(double</em> m1[4][4], double</em> m2[4][4], double* result[4][4])</p>
<p>void add(double* m1[4][4], double* m2[4][4], double* result[4][4])</p>
<pre><code class="language-**">**  
ich soll also aus meinem Hauptprgoramm drei 2D Felder übergeben aber ich bekomm es einfach net hin. Wie würde ein Bsp. aussehen wenn ich z.B:  
  

```cpp
double m1[4][4], m2[4][4], res[4][4];
</code></pre>
<p><strong>NICHT VORGEGEBEN</strong></p>
<p>die drei Felder hab und Sie an die Funktion &quot;mul&quot; übergeben will.</p>
</blockquote>
<p>Das geht nicht. Deine Variablen sind 2-dimensionale Arrays mit dem <strong>Elementtyp double</strong>. Die Funktionen erwarten dagegen 2-dimensionale Arrays (genauer: Pointer auf eindimensionale Arrays, aber dieser Unterschied spielt hier keine Rolle) mit dem <strong>Elementtyp Pointer auf double</strong>. Die Aufgabe muss hier scheitern, und kein noch so kreatives und sinnfreies Herumcasten wird daran etwas ändern.</p>
</blockquote>
<p>Du siehst ja was vorgegeben ist das muss ja irgendwie funktionieren vielleicht muss man dann halt die Felder anders deklarieren aber wie??</p>
<p>Jetzt weiß ich gar net mehr weiter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186960</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 14:59:58 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 15:11:24 GMT]]></title><description><![CDATA[<p>pad8626 schrieb:</p>
<blockquote>
<p>Du siehst ja was vorgegeben ist das muss ja irgendwie funktionieren vielleicht muss man dann halt die Felder anders deklarieren aber wie??</p>
</blockquote>
<p>Hab ich doch gesagt:</p>
<pre><code class="language-cpp">//Deklaration
double *m1[4], *m2[4], *res[4];
</code></pre>
<pre><code class="language-cpp">//Aufruf
mul(&amp;m1, &amp;m2, &amp;res);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1186976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186976</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Mon, 04 Dec 2006 15:11:24 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 15:18:26 GMT]]></title><description><![CDATA[<p>kompilieren tut er es aber ich kann nur die ersten vier Werte beschreiben. Aber die restlichen 12 da sagt er zu viele Initialisierungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186982</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 15:18:26 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 15:19:57 GMT]]></title><description><![CDATA[<p>pad8626 schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>pad8626 schrieb:</p>
<blockquote>
<p>Hi ich hoffe das ist die richtige Kategorie für das Thema.</p>
<p>Ich hab zwei vorgegebene Funktionköpfe:</p>
<p><em><em>```cpp<br />
void mul(double</em> m1[4][4], double</em> m2[4][4], double* result[4][4])</p>
<p>void add(double* m1[4][4], double* m2[4][4], double* result[4][4])</p>
<pre><code class="language-**">**  
ich soll also aus meinem Hauptprgoramm drei 2D Felder übergeben aber ich bekomm es einfach net hin. Wie würde ein Bsp. aussehen wenn ich z.B:  
  

```cpp
double m1[4][4], m2[4][4], res[4][4];
</code></pre>
<p><strong>NICHT VORGEGEBEN</strong></p>
<p>die drei Felder hab und Sie an die Funktion &quot;mul&quot; übergeben will.</p>
</blockquote>
<p>Das geht nicht. Deine Variablen sind 2-dimensionale Arrays mit dem <strong>Elementtyp double</strong>. Die Funktionen erwarten dagegen 2-dimensionale Arrays (genauer: Pointer auf eindimensionale Arrays, aber dieser Unterschied spielt hier keine Rolle) mit dem <strong>Elementtyp Pointer auf double</strong>. Die Aufgabe muss hier scheitern, und kein noch so kreatives und sinnfreies Herumcasten wird daran etwas ändern.</p>
</blockquote>
<p>Du siehst ja was vorgegeben ist das muss ja irgendwie funktionieren vielleicht muss man dann halt die Felder anders deklarieren aber wie??</p>
<p>Jetzt weiß ich gar net mehr weiter</p>
</blockquote>
<p>Es gibt mehrere Möglichkeiten. Letzlich hängt das davon ab, welche Anforderungen die Funktionen an ihre Parameter stellen. Eine denkbare Variante ist jedenfalls, für den Funktionsaufruf ein Hilfsarray p mit dem korrekten Typ für die Funktion (also mit dem Elementtyp Pointer auf double) zu kreieren, und zwar mit dem Inhalt, dass für jedes p[i][j] gilt:<br />
p[i][j] == &amp;a[i][j] (a ist das Ausgangsarray)<br />
Dies wird für alle Parameter der Funktion durchgeführt und diese dann mit den 3 Hilfsarrays aufgerufen.<br />
also</p>
<pre><code class="language-cpp">const int N = 4, M = 4;
void mul_helper(double m1[N][M], double m2[N][M], double result[N][M])
// oder auch void mul_helper(double (&amp;m1)[N][M], double (&amp;m2)[N][M], double (&amp;result)[N][M]), wenn man etwas ausdrücklicher formulieren will
{
    double* pm1[N][M], *pm2[N][M], *presult[N][M]:
    for ( int i = 0; i &lt; N; ++i )
        for ( int j = 0; j &lt; M; ++j )
        {
            pm1[i][j] = &amp;m1[i][j];
            pm2[i][j] = &amp;m2[i][j];
            presult[i][j] = &amp;mresult[i][j];
        }
    mul( pm1, pm2, presult );
}
</code></pre>
<p>schorsch code schrieb:</p>
<blockquote>
<p>pad8626 schrieb:</p>
<blockquote>
<p>Du siehst ja was vorgegeben ist das muss ja irgendwie funktionieren vielleicht muss man dann halt die Felder anders deklarieren aber wie??</p>
</blockquote>
<p>Hab ich doch gesagt:</p>
<pre><code class="language-cpp">//Deklaration
double *m1[4], *m2[4], *res[4];
</code></pre>
<pre><code class="language-cpp">//Aufruf
mul(&amp;m1, &amp;m2, &amp;res);
</code></pre>
</blockquote>
<p>syntaktisch ja, inhaltlich blödsinn. denn hier hast du ja von vornherein nur ein eindimensionales array. die fehlende zweite dimension wird der compiler hoffentlich mit einem segfault belohnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1186983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1186983</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 04 Dec 2006 15:19:57 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 15:40:45 GMT]]></title><description><![CDATA[<p>glaub kaum das unser prof das unbedingt wollte das wir noch sone zusatz Funktion schreiben sonst hätte er das mit in die Aufgabe geschrieben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187007</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 15:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 15:50:44 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>schorsch code schrieb:</p>
<blockquote>
<p>pad8626 schrieb:</p>
<blockquote>
<p>Du siehst ja was vorgegeben ist das muss ja irgendwie funktionieren vielleicht muss man dann halt die Felder anders deklarieren aber wie??</p>
</blockquote>
<p>Hab ich doch gesagt:</p>
<pre><code class="language-cpp">//Deklaration
double *m1[4], *m2[4], *res[4];
</code></pre>
<pre><code class="language-cpp">//Aufruf
mul(&amp;m1, &amp;m2, &amp;res);
</code></pre>
</blockquote>
<p>syntaktisch ja, inhaltlich blödsinn. denn hier hast du ja von vornherein nur ein eindimensionales array. die fehlende zweite dimension wird der compiler hoffentlich mit einem segfault belohnen.</p>
</blockquote>
<p>Oh, da bin ich aber überrascht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Warum sollte das folgende Beispiel mit einem segfault belohnt werden <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="😕"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void print_matrix(double *m[4][4])
{
    for(int i = 0; i &lt; 4; ++i)
    {
        for(int j = 0; j &lt; 4; ++j)
            cout &lt;&lt; (*m)[i][j] &lt;&lt; &quot; &quot;;
        cout &lt;&lt; &quot;\n&quot;;
    }
}

int main()
{
    double *m1[4];

    //Speicher für m1 reservieren
    for(int i = 0; i &lt; 4; ++i)
        m1[i] = new double[4];

    //m1 initialisieren    
    for(int i = 0; i &lt; 4; ++i)
        for(int j = 0; j &lt; 4; ++j)
            m1[i][j] = .5;

    print_matrix(&amp;m1);

    //Speicher von m1 freigeben
    for(int i = 0; i &lt; 4; ++i)
        delete [] m1[i];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1187016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187016</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Mon, 04 Dec 2006 15:50:44 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 16:02:43 GMT]]></title><description><![CDATA[<p>Selbstverständlich kann man (falls es doch keinen segfault gibt) reservieren und initialisieren auch zusammenfassen:</p>
<pre><code class="language-cpp">//Speicher für m1 reservieren und m1 initialisieren
    for(int i = 0; i &lt; 4; ++i)
    {
        m1[i] = new double[4];
        for(int j = 0; j &lt; 4; ++j)
            m1[i][j] = .5;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1187025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187025</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Mon, 04 Dec 2006 16:02:43 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 16:08:43 GMT]]></title><description><![CDATA[<p>schorsch code schrieb:</p>
<blockquote>
<p>Warum sollte das folgende Beispiel mit einem segfault belohnt werden <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="😕"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void print_matrix(double *m[4][4])
{
    for(int i = 0; i &lt; 4; ++i)
    {
        for(int j = 0; j &lt; 4; ++j)
            cout &lt;&lt; (*m)[i][j] &lt;&lt; &quot; &quot;;
        cout &lt;&lt; &quot;\n&quot;;
    }
}

int main()
{
    double *m1[4];
    
    //Speicher für m1 reservieren
    for(int i = 0; i &lt; 4; ++i)
        m1[i] = new double[4];
    
    //m1 initialisieren    
    for(int i = 0; i &lt; 4; ++i)
        for(int j = 0; j &lt; 4; ++j)
            m1[i][j] = .5;
            
    print_matrix(&amp;m1);
    
    //Speicher von m1 freigeben
    for(int i = 0; i &lt; 4; ++i)
        delete [] m1[i];
}
</code></pre>
</blockquote>
<p>Wird es nicht. Ich habe allerdings große Zweifel, dass mul und add so dereferenzieren, wie du das in print_matrix getan hast.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Letzlich hängt das davon ab, welche Anforderungen die Funktionen an ihre Parameter stellen.</p>
</blockquote>
<p>Wahrscheinlicher würde das dort eher wie *m[i][j] aussehen - nur das korrespondiert sinnvoll mit der Deklaration von add und mul. Im Grunde ist deine Deklaration von print_matrix eine Lüge, die nur auf Grund der Eigenheiten von C++ hinsichtlich des Verhältnisses von Arrays und Pointern nicht unmittelbar im Desaster endet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187032</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 04 Dec 2006 16:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 16:11:47 GMT]]></title><description><![CDATA[<p>Jetzt blick ich gar net mehr durch kann mir das noch mal einer für mein Problem übersetzen HEHE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187038</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 16:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 16:35:08 GMT]]></title><description><![CDATA[<p>Es muss bekannt sein, ob die Funktionen mul und add ihre Parameter dereferenzieren, bevor die Index-Operatoren benutzt werden. Der Index-Operator (die eckigen Klammern) hat eine höhere Priorität als der Dereferenzierungsoperator (das Sternchen). Das heißt ohne die Benutzung von Klammern kommen die eckigen Klammern zuerst und dann die Dereferenzierung, also würden dann in m[i][j] Zeiger erwartet werden.<br />
Eine Tabelle mit der Operatorenrangfolge gibt es z. Bsp. <a href="http://www.cpp-tutor.de/cpp/le03/le03_04.htm" rel="nofollow">hier</a>.</p>
<p>Was dein Problem betrifft, fallen mir 3 Möglichkeiten ein:</p>
<p>1.) Falls dir der Quelltext von mul und add zur Verfügung steht, nachsehen wie dereferenziert wird.<br />
2.) Schauen, ob es diesbezüglich eine Beschreibung der Schnittstellen gibt.<br />
3.) Trial &amp; Error (Ausprobieren und Fehler korrigieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187053</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Mon, 04 Dec 2006 16:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 16:42:04 GMT]]></title><description><![CDATA[<p>das einzige was bekannt ist ist die aufgabenstellung ^^</p>
<p>**<br />
5.<br />
(Kategorie Schwer, 4 Punkte) Legen Sie die Dateien matrix.cpp und matrix.h an. Implementieren Sie eine 4x4 Matrizenmultiplikation und eine 4x4 Matrizenaddition. Die Routinen sollen dabei folgende Signatur haben:</p>
<p>void mul(double&amp; m1[4][4], double&amp; m2[4][4], double&amp; result[4][4]) …</p>
<p>void add(double&amp; m1[4][4], double&amp; m2[4][4], double&amp; result[4][4]) …</p>
<p>Machen Sie sich den Grund für diese Schreibweise klar. Sie zwingen nämlich den Benutzer dazu, nicht nur zwei Matrizen für die Rechnung, sondern auch eine Matrix für das Ergebnis anzugeben. Somit reservieren nicht SIE den Speicher für diese Matrix in IHRER Routine, sondern Sie zwingen den Benutzer dazu, die Matrizen selbst anzulegen und auch wieder zu löschen. Andernfalls würden Sie nämlich die Matrix erzeugen und der Benutzer die Matrix löschen und schon wären wir bei einem typischen Problem der Speicherreservierung. Woher soll der Benutzer wissen, dass er die Matrix selbst löschen muss? In der Regel kennt der Benutzer nicht Ihre .cpp Dateien. Testen Sie Ihre Routinen in der main Routine.<br />
**</p>
<p>allerding stehen hier noch &amp; operatoren das hat er korrigiert da müssen * hin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187055</guid><dc:creator><![CDATA[pad8626]]></dc:creator><pubDate>Mon, 04 Dec 2006 16:42:04 GMT</pubDate></item><item><title><![CDATA[Reply to 2D Array an Funktion übergeben on Mon, 04 Dec 2006 17:07:30 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Im Grunde ist deine Deklaration von print_matrix eine Lüge</p>
</blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Probier mal, die Deklaration des Beispiels zu bekehren:</p>
<pre><code class="language-cpp">void print_matrix(double **m[4]);
</code></pre>
<p>Wenn ich &amp;m1 an eine solche (wahre???) Deklaration übergebe, erfreut das den Compiler nicht gerade:</p>
<p>g++ schrieb:</p>
<blockquote>
<p>error: cannot convert `double* (<em>)[4]' to `double</em>**' for argument `1' to `void print_matrix(double***)'</p>
</blockquote>
<p>Lügt der Compiler etwa <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="😕"
    /> Was fällt ihm ein zu behaupten, ich würde double ***m statt double **m[4] erwarten <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="😕"
    /></p>
<p>(Trug-?)Schlussfolgerung: Leider kann der Compiler in diesem Fall die Wahrheit nicht vertragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187070</guid><dc:creator><![CDATA[probierer]]></dc:creator><pubDate>Mon, 04 Dec 2006 17:07:30 GMT</pubDate></item></channel></rss>