<?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[Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht?]]></title><description><![CDATA[<p>Moin,<br />
in so kurzer Zeit schon mein 2. Thread. Diesmal die Frage (denn habe bei google noch nix adaequates gefunden):</p>
<p>Ich habe ein multidim. Funktionspointerarray</p>
<pre><code class="language-cpp">double (*Christoffelp[4][4][4])(double, double, double, double, double, double);
</code></pre>
<p>welches auf die Funktion</p>
<pre><code class="language-cpp">double Christoffel_schw(double x, double y, double z, double r, double a, double M){
</code></pre>
<p>zeigen soll, wobei die Funktion lediglich ein Array deklariert, naemlich:</p>
<pre><code class="language-cpp">double Schw[4][4][4]=List(List(List(0,0,0,0),List(...
</code></pre>
<p>also ein ebenfalls multidim. Array.<br />
Warum ich das mache ist ganz einfach: ich habe viele verschiedene solche grossen Arrays und waehle zu Beginn eins aus, schreibe dann aber alle Funktionen allgemein, s.d. ich stets nur mit dem Pointer arbeiten moechte!<br />
Nur leider gelingt es mir nicht.<br />
Wie funktioniert das also mit der Zuweisung?<br />
Und ja, das Trivialste habe ich bereits probiert:</p>
<pre><code class="language-cpp">Christoffelp[0][0][0]= Christoffel_schw;
</code></pre>
<p>logischerweise erhalte ich so in Christoffelp[0][0][0] das letzte Element in der Deklaration von Christoffel_schw. was also tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270414/array-von-funktionspointern-auf-eine-funktion-deklarieren-die-selbst-aus-einem-array-besteht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 09:20:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270414.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jul 2010 09:06:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 12 Jul 2010 09:06:00 GMT]]></title><description><![CDATA[<p>Moin,<br />
in so kurzer Zeit schon mein 2. Thread. Diesmal die Frage (denn habe bei google noch nix adaequates gefunden):</p>
<p>Ich habe ein multidim. Funktionspointerarray</p>
<pre><code class="language-cpp">double (*Christoffelp[4][4][4])(double, double, double, double, double, double);
</code></pre>
<p>welches auf die Funktion</p>
<pre><code class="language-cpp">double Christoffel_schw(double x, double y, double z, double r, double a, double M){
</code></pre>
<p>zeigen soll, wobei die Funktion lediglich ein Array deklariert, naemlich:</p>
<pre><code class="language-cpp">double Schw[4][4][4]=List(List(List(0,0,0,0),List(...
</code></pre>
<p>also ein ebenfalls multidim. Array.<br />
Warum ich das mache ist ganz einfach: ich habe viele verschiedene solche grossen Arrays und waehle zu Beginn eins aus, schreibe dann aber alle Funktionen allgemein, s.d. ich stets nur mit dem Pointer arbeiten moechte!<br />
Nur leider gelingt es mir nicht.<br />
Wie funktioniert das also mit der Zuweisung?<br />
Und ja, das Trivialste habe ich bereits probiert:</p>
<pre><code class="language-cpp">Christoffelp[0][0][0]= Christoffel_schw;
</code></pre>
<p>logischerweise erhalte ich so in Christoffelp[0][0][0] das letzte Element in der Deklaration von Christoffel_schw. was also tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924909</guid><dc:creator><![CDATA[Renscher]]></dc:creator><pubDate>Mon, 12 Jul 2010 09:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 12 Jul 2010 09:24:32 GMT]]></title><description><![CDATA[<p>Renscher schrieb:</p>
<blockquote>
<p>Ich habe ein multidim. Funktionspointerarray</p>
<pre><code class="language-cpp">double (*Christoffelp[4][4][4])(double, double, double, double, double, double);
</code></pre>
</blockquote>
<p>Ok, klar soweit.</p>
<p>Renscher schrieb:</p>
<blockquote>
<p>welches auf die Funktion</p>
<pre><code class="language-cpp">double Christoffel_schw(double x, double y, double z, double r, double a, double M){
</code></pre>
<p>zeigen soll,</p>
</blockquote>
<p>Ein Array kann nicht auf eine Funktion zeigen. Willst Du die 4*4*4 Zeiger Deines Arrays so initialisieren, dass sie alle auf Christoffel_schw zeigen?</p>
<p>Renscher schrieb:</p>
<blockquote>
<p>wobei die Funktion lediglich ein Array deklariert, naemlich:</p>
<pre><code class="language-cpp">double Schw[4][4][4]=List(List(List(0,0,0,0),List(...
</code></pre>
<p>also ein ebenfalls multidim. Array.</p>
</blockquote>
<p>Das verstehe ich nicht. Was genau meinst Du?</p>
<p>Renscher schrieb:</p>
<blockquote>
<p>Warum ich das mache ist ganz einfach: ich habe viele verschiedene solche grossen Arrays und waehle zu Beginn eins aus, schreibe dann aber alle Funktionen allgemein, s.d. ich stets nur mit dem Pointer arbeiten moechte!<br />
Nur leider gelingt es mir nicht.</p>
</blockquote>
<p>Versuch das nochmal mit anderen Worten zu erklären. Mir ist nicht klar, was Du willst.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924918</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 12 Jul 2010 09:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 12 Jul 2010 09:24:47 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht, was dein Problem ist. Bei mir funktioniert es problemlos:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

double (*Christoffelp[4][4][4])(double, double, double, double, double, double);
double Christoffel_schw(double x, double y, double z, double r, double a, double M)
{
    return 1337;
}

int main(])
{
    Christoffelp[0][0][0] = &amp;Christoffel_schw;
    cout &lt;&lt; Christoffelp[0][0][0](0, 1, 2, 3, 4, 5);
	return 0;
}
</code></pre>
<p>Welchen Compiler benutzt du denn?</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924919</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Mon, 12 Jul 2010 09:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 12 Jul 2010 09:45:38 GMT]]></title><description><![CDATA[<p>K, dachte mir, dass das nicht so leicht zu verstehen war. Deswegen habe ichs wohl auch nicht bei Google gefunden, weil ich mir nicht klar bin, was ich eigentlich realisieren will. Also:</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20386">@rant</a>: Dein Beispiel funktioniert natuerlich, da du nur 1 explizites element zuweist und das testest. Verwendest du fuer deine Ausgabe hingegen:</p>
<pre><code class="language-cpp">Christoffelp[0][0][0]= Christoffel_schw;
  for(int i=0;i&lt;4;i++){ //tests the Christoffelsymbols
    for(int j=0;j&lt;4;j++){
      for(int k=0;k&lt;4;k++){
	std::cout &lt;&lt;  Christoffelp[i][j][k](2.,2.,2.,sqrt(12.),0,3) &lt;&lt; std::endl;
     }
   }
 }
</code></pre>
<p>So funktioniert dies natuerlich nicht, da ja das 1. element zugewiesen ist Christoffelp[0][0][0], jedoch die anderen nicht, auf die ich ja zugreifen will.</p>
<p>@Kruemelkacker (nice nick);</p>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Ein Array kann nicht auf eine Funktion zeigen. Willst Du die 4*4*4 Zeiger Deines Arrays so initialisieren, dass sie alle auf Christoffel_schw zeigen?</p>
</blockquote>
<p>Genau da liegt der Hase im Pfeffer. Ich moechte eigentlich, dass der Funktionspointer auf die Funktion Christoffel_schw zeigt, aber mein eigentliches Ziel ist, dass z.B. Christoffelp[0][1][2]() auf Schw[0][1][2] zeigt etc! Damit haette ich in dem Pointer naemlich die Matrixelement von Schw verlinkt. Das Problem ist, dass bei jeder Iteration die Argumente von Christoffelp (also, x,y,z,...) veraendert werden. D.h. dieser Zugriff geschieht sehr oft. Ich hoffe, es ist klar, warum ich nicht explizit schleifen anlegen will, um alle Elemente immer einzeln zuzuweisen.<br />
Jetzt klarer?</p>
<p>Edit: Also nochmal kurz: double Christoffel_schw() ist eine Funktion in der nur eine 4*4*4 matrix initialisiert wird, naemlich: Schw[][][] ! Mit dem Array von Funktionspointern Christoffelp[0][1][2]() moechte ich gerne auf die in Christoffel_schw() deklarierten Elemente von Schw[][][] zugreifen, aber wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924925</guid><dc:creator><![CDATA[Renscher]]></dc:creator><pubDate>Mon, 12 Jul 2010 09:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 12 Jul 2010 10:48:17 GMT]]></title><description><![CDATA[<p>Renscher schrieb:</p>
<blockquote>
<p>Genau da liegt der Hase im Pfeffer. Ich moechte eigentlich, dass der Funktionspointer auf die Funktion Christoffel_schw zeigt, aber mein eigentliches Ziel ist, dass z.B. Christoffelp[0][1][2]() auf Schw[0][1][2] zeigt etc! Damit haette ich in dem Pointer naemlich die Matrixelement von Schw verlinkt. Das Problem ist, dass bei jeder Iteration die Argumente von Christoffelp (also, x,y,z,...) veraendert werden. D.h. dieser Zugriff geschieht sehr oft. Ich hoffe, es ist klar, warum ich nicht explizit schleifen anlegen will, um alle Elemente immer einzeln zuzuweisen.<br />
Jetzt klarer?</p>
<p>Edit: Also nochmal kurz: double Christoffel_schw() ist eine Funktion in der nur eine 4*4*4 matrix initialisiert wird, naemlich: Schw[][][] ! Mit dem Array von Funktionspointern Christoffelp[0][1][2]() moechte ich gerne auf die in Christoffel_schw() deklarierten Elemente von Schw[][][] zugreifen, aber wie?</p>
</blockquote>
<p>Das geht gar nicht. Woher soll denn die Funktion wissen, in welchen Element der Matrix der Pointer gespeichert war, über den Du die Funktion aufgerufen hast?</p>
<p>Außerdem was versprichst Du Dir den von so einer verqueren Logik?</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924957</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 12 Jul 2010 10:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 12 Jul 2010 11:41:31 GMT]]></title><description><![CDATA[<p>Renscher schrieb:</p>
<blockquote>
<p>Genau da liegt der Hase im Pfeffer. Ich moechte eigentlich, dass der Funktionspointer auf die Funktion Christoffel_schw zeigt, aber mein eigentliches Ziel ist, dass z.B. Christoffelp[0][1][2]() auf Schw[0][1][2] zeigt etc!</p>
</blockquote>
<p><code>Christoffelp[0][1][2]</code> ist vom Typ <code>double(*)(double,...,double)</code> .<br />
<code>Schw[0][1][2]</code> ist vom Typ <code>double</code> .<br />
<code>&amp;Schw[0][1][2]</code> ist vom Typ <code>double*</code> .<br />
Diese Zeigertypen passen also nicht zusammen.</p>
<p>Renscher schrieb:</p>
<blockquote>
<p>Jetzt klarer?</p>
</blockquote>
<p>Etwas. Ich seh' nur den Sinn darin nicht.</p>
<p>Renscher schrieb:</p>
<blockquote>
<p>Edit: Also nochmal kurz: double Christoffel_schw() ist eine Funktion in der nur eine 4*4*4 matrix initialisiert wird, naemlich: Schw[][][] ! Mit dem Array von Funktionspointern Christoffelp[0][1][2]() moechte ich gerne auf die in Christoffel_schw() deklarierten Elemente von Schw[][][] zugreifen, aber wie?</p>
</blockquote>
<p>Zeig doch mal die Definition der Funktion Christoffel_schw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924982</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 12 Jul 2010 11:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Funktionspointern auf eine Funktion deklarieren, die selbst aus einem Array besteht? on Mon, 19 Jul 2010 14:57:25 GMT]]></title><description><![CDATA[<p>Is kompliziert, geb ich zu!<br />
Was waere denn ne leichtere Variante?<br />
Also ich moechte halt meinen Quellcode so schreiben, dass ich mittendrin immer ne Funktion aufrufe, Christoffelp[0][1][2](x,y,z,a,b). Die bekommt bei jedem Durchlauf neue Werte x,y,z,a,b und ich brauche immer alle Matrixelemente neu berechnet.<br />
Das Problem ist, dass ich eben nicht nur eine Matrixmoeglichkeit habe, sondern der Benutzer am Anfang die Matrix auswaehlt, mit der Gerechnet werden soll. Deswegen wollte ich das ueber diese komplizierte Zuordnung machen. Wie geht es denn leichter?</p>
<p>Edit:</p>
<p>Hier meine Definition:</p>
<pre><code class="language-cpp">double Christoffel_schw(double x, double y, double z, double r, double a, double M){
double Schw[4][4][4]=List(List(List(0,0,0,0),List(0,(-2*M*pow(r,2)*(pow(r,3) + 2*M*(1 + pow(r,2))*pow(y,2))*(pow(r,3) + 2*M*(1 + pow(r,2))*pow(z,2)))/
      (pow(r,10) - 16*pow(M,4)*pow(1 + pow(r,2),3)*pow(x,2)*pow(y,2)*pow(z,2) + 2*M*pow(r,9)*(-1 + pow(x,2) + pow(y,2) + pow(z,2)) + 
        8*pow(M,3)*r*pow(1 + pow(r,2),2)*(-2*pow(x,2)*pow(y,2)*pow(z,2) + 
           pow(r,2)*(-(pow(x,2)*pow(y,2)) + (-pow(..))...,...,...),List(...),List(...)),List(..),List(..),List(..))
</code></pre>
<p>Es handelt sich hierbei um die Christoffelsymbole unter SChwarzschildloesung in numerisch angepassten coordinaten!</p>
<p>Edit2:<br />
Da nun keiner weiter einen anderen Vorschlag hatte, habe ich mich fuer eine andere Loesung entschieden, in der ich die 4*4*4 Matrix an eine Unterfunktion uebergebe und dabei, ueber dei Adresse dieser Matrix, die Funktionswerte bleibend aendere. Trotzdem vielen dank fuer die Hilfe! <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/1925002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925002</guid><dc:creator><![CDATA[Renscher]]></dc:creator><pubDate>Mon, 19 Jul 2010 14:57:25 GMT</pubDate></item></channel></rss>