<?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[Frage zu Funktionsparametern]]></title><description><![CDATA[<p>hi wie muss ich hier die Funktion func benutzen?</p>
<p>Fehler:<br />
[BCC32 Fehler] Unit1.cpp(12): E2027 Eine Speicheradresse muß verwendet werden</p>
<p>Ich versteh nicht wie das hier funktionieren soll.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int call(int c);
int func ( int z1, int call (int c) );

int main(int argc, char* argv[])
{

func ( 2,  &amp;call(2) );

system(&quot;PAUSE&quot;);
	return 0;
}
//---------------------------------------------------------------------------

int call ( int c )
{
	return c;
}

int func ( int z1, int call (int c) )
{
cout&lt;&lt; z1 &lt;&lt; endl;
// Wie kann man hier auf den zweiten Parameter zugreifen?

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/298244/frage-zu-funktionsparametern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 22:32:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298244.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Jan 2012 12:34:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 12:34:49 GMT]]></title><description><![CDATA[<p>hi wie muss ich hier die Funktion func benutzen?</p>
<p>Fehler:<br />
[BCC32 Fehler] Unit1.cpp(12): E2027 Eine Speicheradresse muß verwendet werden</p>
<p>Ich versteh nicht wie das hier funktionieren soll.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int call(int c);
int func ( int z1, int call (int c) );

int main(int argc, char* argv[])
{

func ( 2,  &amp;call(2) );

system(&quot;PAUSE&quot;);
	return 0;
}
//---------------------------------------------------------------------------

int call ( int c )
{
	return c;
}

int func ( int z1, int call (int c) )
{
cout&lt;&lt; z1 &lt;&lt; endl;
// Wie kann man hier auf den zweiten Parameter zugreifen?

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2168687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168687</guid><dc:creator><![CDATA[classf]]></dc:creator><pubDate>Mon, 16 Jan 2012 12:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 12:45:11 GMT]]></title><description><![CDATA[<p>classf schrieb:</p>
<blockquote>
<p>hi wie muss ich hier die Funktion func benutzen?</p>
<p>Fehler:<br />
[BCC32 Fehler] Unit1.cpp(12): E2027 Eine Speicheradresse muß verwendet werden</p>
</blockquote>
<p>Leider eine völlig unverständliche Fehlermeldung <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int call(int c);
int func ( int z1, int call (int c) );

int main(int argc, char* argv[])
{

func ( 2,  &amp;call(2) );

system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
</blockquote>
<p>Offensichtlich soll func eine Funktion übergeben werden. Der Funktionsparameter lautet ja <code>int call(int c)</code> , d.h. erwartet wird eine Funktion (bzw. ein Zeiger auf eine Funktion), die einen int-Parameter hat und int zurückgibt. So siehts aus:</p>
<pre><code class="language-cpp">func(2, call);
</code></pre>
<p>Das was du hast, ergibt keinen Sinn. Vom Typ her würdest du einen Zeiger auf int übergeben, aber da <code>call(2)</code> ein rvalue ist, kannst du darauf keinen Zeiger zeigen lassen.</p>
<blockquote>
<pre><code class="language-cpp">int func ( int z1, int call (int c) )
{
cout&lt;&lt; z1 &lt;&lt; endl;
// Wie kann man hier auf den zweiten Parameter zugreifen?

return 0;
}
</code></pre>
</blockquote>
<p>Per Name. Du kannst die Funktion einfach aufrufen:</p>
<pre><code class="language-cpp">cout &lt;&lt; call(z1);
</code></pre>
<p>BTW das geht zwar so, aber ich meine häufiger sieht man es, dass Zeiger auf Funktionen auch als Zeiger deklariert werden:</p>
<pre><code class="language-cpp">int call(int c);
int func(int z1, int (*call)(int c))
{
  cout &lt;&lt; call(z1);
}
...
func(2, call);
</code></pre>
<p>(Und der Name der Funktion und des Parameters müssen auch nicht übereinstimmen, falls das nicht ohnehin klar war)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2168696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168696</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 16 Jan 2012 12:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 12:45:23 GMT]]></title><description><![CDATA[<p>Funktionszeiger funktionieren so:</p>
<pre><code class="language-cpp">void foo(int (*function) ())
{
  std::cout &lt;&lt; function();
}

int bar()
{
  return 5;
}

int main()
{
  foo(bar);
}
</code></pre>
<p>Bei dir ist nicht mal die Deklaration von &quot;func&quot; korrekt. Zudem hast du bei dem Parameter einen Denkfehler, ein Funktionspointer kann auch nicht zaubern, der schleppt keine weiteren Parameter mit sich rum. oO</p>
<p>PS: Normalerweise kann man Funktionspointer in seinen Programmen vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2168697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168697</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 16 Jan 2012 12:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 12:47:15 GMT]]></title><description><![CDATA[<p>Der Aufruf muss lauten</p>
<pre><code class="language-cpp">func ( 2, call );
</code></pre>
<p>Die Funtkion func(...) hat als zweites Argument bloss einen Zeiger auf eine Funktion, die einen int-Wert als Argument und einen int-Wert als Rueckgabewert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2168699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168699</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Mon, 16 Jan 2012 12:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 12:48:30 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Die Funtkion func(...) hat als zweites Argument bloss einen Zeiger auf eine Funktion, die einen int-Wert als Argument und einen int-Wert als Rueckgabewert hat.</p>
</blockquote>
<p>Nein, die Deklaration von func ist kein gültiges C++. <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/2168701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168701</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 16 Jan 2012 12:48:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 12:50:52 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Nein, die Deklaration von func ist kein gültiges C++. <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>Selbstverständlich ist das gültig. Wie kommst du denn auf sowas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2168702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168702</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 16 Jan 2012 12:50:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 13:45:01 GMT]]></title><description><![CDATA[<p>Dort -&gt; <a href="http://www.cplusplus.com/doc/tutorial/pointers/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/pointers/</a><br />
(Ganz unten auf der Seite) habe ich auch noch ein Beispiel gefunden. Wenn ich int func ( int z1, int (*call) (int c) ); benutze da bekomme ich mein Programm ans laufen.</p>
<p>Jedoch hab ich jetzt noch 2 Fragen.</p>
<ol>
<li></li>
</ol>
<p>Geht das auch so? int func ( int z1, int call (int c) );</p>
<p>Oder MUSS ich den Pointer verwenden wie hier:<br />
int func ( int z1, int (*call) (int c) );</p>
<p>2. Müsste das ganze theoretisch nicht auch so gehen?<br />
Wenn ich das: func ( &amp;call) ); rauslassen dann Kompiliert es zumindest.</p>
<p>[BCC32 Fehler] Unit1.cpp(12): E2034 Konvertierung von 'int (<em>)(int)' nach 'int (</em>)()' nicht möglich<br />
[BCC32 Fehler] Unit1.cpp(12): E2342 Keine Übereinstimmung des Typs beim Parameter 'functocall' ('int (<em>)()' erwartet, 'int (</em>)(int)' erhalten)<br />
[BCC32 Fehler] Unit1.cpp(12): E2379 In Anweisung fehlt ;</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int call(int c);
int func ( int (*functocall) () );

int main(int argc, char* argv[])
{

func ( &amp;call) );

system(&quot;PAUSE&quot;);
	return 0;
}
//---------------------------------------------------------------------------

int call ( int c )
{
	cout&lt;&lt;&quot;call parameter: &quot; &lt;&lt; c &lt;&lt; endl;
	return c;
}

int func ( int functocall () )
{
functocall(); // Soll call(); aufrufen
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2168735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168735</guid><dc:creator><![CDATA[classf]]></dc:creator><pubDate>Mon, 16 Jan 2012 13:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 14:26:57 GMT]]></title><description><![CDATA[<p>classf schrieb:</p>
<blockquote>
<p>Jedoch hab ich jetzt noch 2 Fragen.</p>
<ol>
<li></li>
</ol>
<p>Geht das auch so? int func ( int z1, int call (int c) );</p>
<p>Oder MUSS ich den Pointer verwenden wie hier:<br />
int func ( int z1, int (*call) (int c) );</p>
</blockquote>
<p>Laut Standard geht beides -- bei Funktionsparametern werden Funktionstypen automatisch als Funktionszeigertypen angesehen. Das zweite ist aber expliziter, das würde ich aus Stilgründen bevorzugen.</p>
<p>Beim Aufruf geht auch beides:</p>
<pre><code class="language-cpp">call(10);
// oder
(*call)(10);
</code></pre>
<p>Hier würde ich das erste bevorzugen. Alles Geschmackssache.</p>
<blockquote>
<p>2. Müsste das ganze theoretisch nicht auch so gehen?</p>
</blockquote>
<p>Nein. <code>func</code> ruft <code>functocall</code> ohne Argument auf. <code>call</code> erwartet aber ein Argument. Wo soll das herkommen?</p>
<p>Dieses Problem wird schon durch die Signatur der Funktionen erfasst. Der Compiler sagt dir, dass die Typen nicht übereinstimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2168758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168758</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 16 Jan 2012 14:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionsparametern on Mon, 16 Jan 2012 14:32:08 GMT]]></title><description><![CDATA[<p><a href="http://ideone.com/b5mE9" rel="nofollow">http://ideone.com/b5mE9</a></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/904">@Bashar</a> &amp; icarus2<br />
Tja.. ehrlich gesagt wusste ich das nicht. Man lernt scheinbar nie aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2168761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2168761</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 16 Jan 2012 14:32:08 GMT</pubDate></item></channel></rss>