<?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[Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern )]]></title><description><![CDATA[<p>Hallo</p>
<p>int *ptr(); &lt;-- Gibt eine Adresse zurück oder doch einen Zeiger ?</p>
<p>void (*ptr_func) (); &lt;-- Kann eine Adresse von einer Funktion erhalten</p>
<p>Kann man hierzu einfach sagen Pointer Funktion ? int *ptr();<br />
Oder wäre das der falsche Begriff dafür?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void ausgabe ();
void (*ptr_func) ( ) ;

int main ()
{

ptr_func =  ( void(*) () ) &amp;ausgabe ;  // void (*ptr_func)(); zeigt auf die Adresse der Funktion  void ausgabe();

(*ptr_func)();  // Die Funktion void ausgabe(); aufrufen (*ptr_func)(); zeigt auf die
               // Funktion void ausgabe();

system(&quot;PAUSE&quot;);
}

void ausgabe ( )
{
 cout&lt;&lt;&quot;ok&quot;;
}
</code></pre>
<p>Hier bekomme ich die Warnung:</p>
<p>&quot;Verdächtige Zeigerumwandlung&quot; was bedeutet das <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;

int *ausgabe () ;

int main ()
{

int ret;

ret = *ausgabe();

cout&lt;&lt;ret;

system(&quot;PAUSE&quot;);
}

int *ausgabe ( )
{
int var=8;

return &amp;var;     
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/274344/kurze-frage-zu-begriffserklärung-von-verschiedenen-pointern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 17:15:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274344.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Sep 2010 11:25:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 11:25:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>int *ptr(); &lt;-- Gibt eine Adresse zurück oder doch einen Zeiger ?</p>
<p>void (*ptr_func) (); &lt;-- Kann eine Adresse von einer Funktion erhalten</p>
<p>Kann man hierzu einfach sagen Pointer Funktion ? int *ptr();<br />
Oder wäre das der falsche Begriff dafür?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void ausgabe ();
void (*ptr_func) ( ) ;

int main ()
{

ptr_func =  ( void(*) () ) &amp;ausgabe ;  // void (*ptr_func)(); zeigt auf die Adresse der Funktion  void ausgabe();

(*ptr_func)();  // Die Funktion void ausgabe(); aufrufen (*ptr_func)(); zeigt auf die
               // Funktion void ausgabe();

system(&quot;PAUSE&quot;);
}

void ausgabe ( )
{
 cout&lt;&lt;&quot;ok&quot;;
}
</code></pre>
<p>Hier bekomme ich die Warnung:</p>
<p>&quot;Verdächtige Zeigerumwandlung&quot; was bedeutet das <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;

int *ausgabe () ;

int main ()
{

int ret;

ret = *ausgabe();

cout&lt;&lt;ret;

system(&quot;PAUSE&quot;);
}

int *ausgabe ( )
{
int var=8;

return &amp;var;     
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1956836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956836</guid><dc:creator><![CDATA[ptr***]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 11:57:35 GMT]]></title><description><![CDATA[<p>ptr*** schrieb:</p>
<blockquote>
<p>int *ptr(); &lt;-- Gibt eine Adresse zurück oder doch einen Zeiger ?</p>
</blockquote>
<p>Einen Zeiger, der aber meistens eine Adresse beinhaltet (oder <code>NULL</code> ).</p>
<p>ptr*** schrieb:</p>
<blockquote>
<p>void (*ptr_func) (); &lt;-- Kann eine Adresse von einer Funktion erhalten</p>
</blockquote>
<p>Ja (Funktionszeiger).</p>
<p>ptr*** schrieb:</p>
<blockquote>
<p>Kann man hierzu einfach sagen Pointer Funktion ? int *ptr();</p>
</blockquote>
<p>Nein, zumindest nicht wenn du willst, dass man dich versteht.</p>
<p>ptr*** schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int *ausgabe ( )
{
int var=8;

return &amp;var;     
}
</code></pre>
</blockquote>
<p>Du gibst die Adresse einer lokalen Variable zurück, die am Ende der Funktion ungültig wird, weil die Variable zerstört wird. Sowas solltest du nicht tun, da es undefiniertes Programmverhalten hervorrufen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956857</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 11:57:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 13:22:40 GMT]]></title><description><![CDATA[<p>Wie benutzt man den so eine Funktion richtig ?</p>
<pre><code class="language-cpp">int *ausgabe ( ) 
{ 
int var=8; 

return &amp;var;     
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1956909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956909</guid><dc:creator><![CDATA[ptr**]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 13:24:13 GMT]]></title><description><![CDATA[<p>Was soll die Funktion denn tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956911</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:24:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 13:49:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int *ausgabe ( )
{
// Platz für einen int auf dem heap schaffen
int* bla = new int; 

// Irgendwas damit machen
*bla = 8;

// Pointer zurückgeben
return bla;    
}
</code></pre>
<p>Der integer auf den bla zeigt wird mit new auf dem heap angelegt. Daher wird er nicht gelöscht wenn der Stack nach abarbeiten der Funktion bereinigt wird.<br />
Du musst dich aber später irgendwo mit delete um die Freigabe dieses Speichers kümmern (sonst Speicherleck!)</p>
<p>int* ist eine Adresse. Diese Adresse wird kopiert und zurückgegeben</p>
<p>irgendwo in deinem Programm:</p>
<pre><code class="language-cpp">int *blubb = ausgabe();
// gibt &quot;8&quot; aus
cout &lt;&lt; *blubb &lt;&lt; endl;
// wenn du den integer nicht mehr brauchst
delete blubb;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1956921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956921</guid><dc:creator><![CDATA[antialias]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 13:54:12 GMT]]></title><description><![CDATA[<p>Genau soll man es <strong>nicht</strong> machen. So hat man es in C gemacht, doch dieser Ansatz ist ganz schön fehleranfällig und in C++ durch RAII abgelöst.</p>
<pre><code class="language-cpp">std::auto_ptr&lt;int&gt; ausgabe();
</code></pre>
<p>Wobei es im Allgemeinen natürlich um komplexere Anwendungen als die Rückgabe eines <code>int</code> s geht, in denen mehrere Ablaufpfade oder Exceptions die Vorteile von RAII erst richtig zum Vorschein kommen lassen. Hier würde ich einfach einen <code>int</code> als Kopie zurückgeben, das ist ohnehin um einiges schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956924</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 13:54:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 14:43:56 GMT]]></title><description><![CDATA[<p>[qoute]<br />
Hier würde ich einfach einen int als Kopie zurückgeben, das ist ohnehin um einiges schneller.<br />
[/quote]</p>
<p>Wie meinst du das ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956949</guid><dc:creator><![CDATA[ptr**]]></dc:creator><pubDate>Fri, 24 Sep 2010 14:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 15:11:56 GMT]]></title><description><![CDATA[<p>Die dynamische Speicherverwaltung fällt weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956959</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 15:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 15:44:14 GMT]]></title><description><![CDATA[<blockquote>
<p>doch dieser Ansatz ist ganz schön fehleranfällig und in C++ durch RAII abgelöst.</p>
</blockquote>
<p>Stimmt soweit. Jedoch kann man sich mit auto_ptr (oder auch mit shared_ptr) genauso gut in den Fuß schiessen wie mit new und delete (und meist sind diese Fehler noch schwerer zu debuggen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956971</guid><dc:creator><![CDATA[antialias]]></dc:creator><pubDate>Fri, 24 Sep 2010 15:44:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 15:57:57 GMT]]></title><description><![CDATA[<p>antialias schrieb:</p>
<blockquote>
<p>Jedoch kann man sich mit auto_ptr (oder auch mit shared_ptr) genauso gut in den Fuß schiessen wie mit new und delete (und meist sind diese Fehler noch schwerer zu debuggen).</p>
</blockquote>
<p>Kannst du hier etwas konkreter werden (möglichst im Bezug auf beide Smart-Pointer)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956975</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 15:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 16:37:16 GMT]]></title><description><![CDATA[<p>Bin halt kein Fan von auto_ptr.<br />
- Die copy-problematik mit STL containern<br />
- dass die sich gegenseitig die Gültigkeit wegschnappen (<em>der</em> Fehler ist mal wirklich schwer zu finden wenn plötzlich ein Pointer seine Gültigkeit verliert ohne dass man ihm irgendwas zugewiesen hat)<br />
- dann kann man ihn nicht auf NULL testen.<br />
.<br />
.<br />
.</p>
<p>shared_pointer ist schon besser. Aber wenn man hier vergisst neue Kopien vom shared_pointer zu machen (und sie Anstelle vom Objekt macht), dann kommt das ganze reference counting durcheinander - auch das ist extrem schwer zu debuggen.</p>
<p>Nicht das es mit normalen Pointern leichter ist. Aber wenn ich einen shared_pointer einsetzte dann geh ich halt davon aus, dass er tut was er soll. Sprich: ich such bei Fehler <em>zuletzt</em> beim reference counting mechanismus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1956989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956989</guid><dc:creator><![CDATA[antialias]]></dc:creator><pubDate>Fri, 24 Sep 2010 16:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 16:55:55 GMT]]></title><description><![CDATA[<p>Danke für die Ausführungen.</p>
<p>Es stimmt schon, natürlich kann man die Smart-Pointer falsch anwenden. Gerade <code>std::auto_ptr</code> kann mit seiner Move-Semantik am Anfang verwirrend sein. Aber das sind meiner Meinung nach vor allem Anfängerprobleme, die hauptsächlich aus Unkenntnis der Smart-Pointer und ihrer Besitzsemantik resultieren.</p>
<p>Hingegen ist ein sauberes Aufräumen auch für fortgeschrittene Programmierer eine Herausforderung, wenn der Code komplexer wird. Beispiel: Implementiere den folgenden Code ohne Smart-Pointers, sodass er auch im Falle von Exceptions keine Memory Leaks aufweist.</p>
<pre><code class="language-cpp">void Function()
{
    scoped_ptr&lt;A&gt; a(new A);
    scoped_ptr&lt;B&gt; b(new B);
    scoped_ptr&lt;C&gt; c(new C);

   if (condition)
      return;

   if (otherCondition)
      throw std::runtime_error(&quot;!&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1956995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956995</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 16:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kurze Frage zu Begriffserklärung ( Von verschiedenen Pointern ) on Fri, 24 Sep 2010 17:07:17 GMT]]></title><description><![CDATA[<p>Übrigens: Folgende Mängel von <code>std::auto_ptr</code> haben mich dazu veranlasst, selbst einen verschiebbaren Smart-Pointer zu schreiben:</p>
<ul>
<li>Deklaration benötigt vollständig definierten Pointee-Typ. Das ist manchmal, besonders in Header-Dateien, eine unnötige Abhängigkeit.</li>
<li>Tatsächlich kompiliert der Code in meiner Implementierung jedoch auch mit unvollständigem Typ und ruft im Destruktor undefiniertes Verhalten hervor (Freigabe eines nicht zerstörten Objekts).</li>
<li>Wie von dir erwähnt keine Methode, um auf Gültigkeit zu prüfen. <code>get()</code> ist nicht dafür konzipiert.</li>
<li>Kein <code>swap()</code> .</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1956999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1956999</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Sep 2010 17:07:17 GMT</pubDate></item></channel></rss>