<?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[Übergabe eines Teilarrays an Funktion wie in Fortran]]></title><description><![CDATA[<p>Hallo Gemeinde,</p>
<p>ich habe mal wieder eine Frage in Bezug auf die Übersetzung von Fortran Code in C++.</p>
<p>In Fortran sind Konstrukte wie</p>
<pre><code>integer grdpoi(ngrdp,nbl,ngrid)
...
call foo(grdpoi(1,1,n))
...
</code></pre>
<p>üblich. In foo kommt dann nur noch ein 2D Array an.</p>
<pre><code>subroutine foo(grdpoi)
integer grdpoi(ngrdp,nbl)
...
</code></pre>
<p>Wenn man wegen der Übersetzung die Paramterreihenfolge wie in Fortran belassen will. Wie kann man aus einer n-Dimensionalen Matrix Klasse eine n-1 Dimensionale Matrix übergeben?</p>
<p>Gruß Andreas Georg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322377/übergabe-eines-teilarrays-an-funktion-wie-in-fortran</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 03:51:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322377.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Dec 2013 19:01:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übergabe eines Teilarrays an Funktion wie in Fortran on Tue, 17 Dec 2013 19:01:59 GMT]]></title><description><![CDATA[<p>Hallo Gemeinde,</p>
<p>ich habe mal wieder eine Frage in Bezug auf die Übersetzung von Fortran Code in C++.</p>
<p>In Fortran sind Konstrukte wie</p>
<pre><code>integer grdpoi(ngrdp,nbl,ngrid)
...
call foo(grdpoi(1,1,n))
...
</code></pre>
<p>üblich. In foo kommt dann nur noch ein 2D Array an.</p>
<pre><code>subroutine foo(grdpoi)
integer grdpoi(ngrdp,nbl)
...
</code></pre>
<p>Wenn man wegen der Übersetzung die Paramterreihenfolge wie in Fortran belassen will. Wie kann man aus einer n-Dimensionalen Matrix Klasse eine n-1 Dimensionale Matrix übergeben?</p>
<p>Gruß Andreas Georg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2372423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2372423</guid><dc:creator><![CDATA[fwbp34]]></dc:creator><pubDate>Tue, 17 Dec 2013 19:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe eines Teilarrays an Funktion wie in Fortran on Tue, 17 Dec 2013 19:07:53 GMT]]></title><description><![CDATA[<p>std::valarray</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2372424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2372424</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Tue, 17 Dec 2013 19:07:53 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe eines Teilarrays an Funktion wie in Fortran on Tue, 17 Dec 2013 19:48:49 GMT]]></title><description><![CDATA[<p>Erstmal Danke,</p>
<p>aber ich verstehe valarray nicht so richtig. So wie ich es verstehe kann ich mit slices auf meine Elemente zugreifen. Aber wenn ich das valarray an foo übergebe, übergebe ich doch den ganzen Vektor. Wie reduziert sich die Dimension von z.B. 3D in der aufrufenden Funktion zu 2D in foo?</p>
<p>In Fortran verstehe ich was passiert, dort läuft ja der linke Index am schnellsten, so das grdpoi(1,1,n) mir die Adresse für das n-te 2D Array übergibt. Und in foo muß ich die Dimension für das 2D Array halt wissen (woher auch immer).</p>
<p>Ich behelf mir bisher damit</p>
<pre><code>void foo(double* GRDPOI)
{
  auto grdpoi = [] (int i, int j) -&gt; double { return GRDPOI[(i-1)+(j-1)*ngrdp];};

...

}
</code></pre>
<p>So ein Vorspann am Anfang der Funktion funktioniert zwar, ist aber genauso unansehnlich wie der FORTRAN Code und sollte vieleicht eleganter zu realisieren sein.</p>
<p>Gruß Andreas Georg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2372434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2372434</guid><dc:creator><![CDATA[fwbp34]]></dc:creator><pubDate>Tue, 17 Dec 2013 19:48:49 GMT</pubDate></item></channel></rss>