<?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[Zeiger-Problem?]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Warum meckert der Compiler in der Zeile 13 rum?</p>
<pre><code class="language-cpp">int main()
{
	int *xPtr;
	int test, neu;

	test = 4;

	xPtr = &amp;test;

	xPtr = xPtr + 64000;

	xPtr = 0x0000AAAA;

	*xPtr = 16;

	cout &lt;&lt; *xPtr;

return 0;
}
</code></pre>
<p>Warum steht in meinen Folien ein ähnliches Beispiel, aber so aufbereitet, als ob das funktionieren sollte! (Das sind Folien unseres Dozenten.)</p>
<pre><code class="language-cpp">void main()
{
int x;
int * xPtr;

xPtr = &amp;x;
*xPtr = 0x00FF00FF;
xPtr = 0x0000FFFF;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/288883/zeiger-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 14:20:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288883.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Jun 2011 13:27:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:28:22 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Warum meckert der Compiler in der Zeile 13 rum?</p>
<pre><code class="language-cpp">int main()
{
	int *xPtr;
	int test, neu;

	test = 4;

	xPtr = &amp;test;

	xPtr = xPtr + 64000;

	xPtr = 0x0000AAAA;

	*xPtr = 16;

	cout &lt;&lt; *xPtr;

return 0;
}
</code></pre>
<p>Warum steht in meinen Folien ein ähnliches Beispiel, aber so aufbereitet, als ob das funktionieren sollte! (Das sind Folien unseres Dozenten.)</p>
<pre><code class="language-cpp">void main()
{
int x;
int * xPtr;

xPtr = &amp;x;
*xPtr = 0x00FF00FF;
xPtr = 0x0000FFFF;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2083232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083232</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:33:43 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Warum meckert der Compiler in der Zeile 13 rum?</p>
</blockquote>
<p>Liest du die Fehlermeldungen auch ab und zu? Darin steht meist der Grund.</p>
<p>vip@r schrieb:</p>
<blockquote>
<p>Warum steht in meinen Folien ein ähnliches Beispiel, aber so aufbereitet, als ob das funktionieren sollte! (Das sind Folien unseres Dozenten.)</p>
</blockquote>
<p>Frag das den Dozenten. Jedenfalls ist es nicht erlaubt, einen <code>int</code> implizit (ohne Cast) zu einem <code>int*</code> zu konvertieren.</p>
<p>Übrigens heisst es <code>int main()</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083239</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:33:55 GMT]]></title><description><![CDATA[<p>Der Compiler will dich davon abhalten, falschen Code zu schreiben. Pointern feste Werte zuzuweisen macht nur in ganz seltenen Ausnahmefällen Sinn. Du kannst ihn zwar mit einem reinterpret_cast zu der Umwandlung zwingen, aber das erzeugt dann bloß Abstürze zur Laufzeit.</p>
<p>Der Code deines Dozenten wird übrigens aus dem gleichen Grunde nicht compiliert werden. Und wenn ich <code>void main</code> sehe, scheint es bei ihm sowieso nicht weit her zu sein mit korrektem Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083241</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:37:20 GMT]]></title><description><![CDATA[<p>Gut.</p>
<p>Hier noch eine Frage:</p>
<pre><code class="language-cpp">int main()
{
	int * iPtr;
	double * dPtr;
	int test, neu;

	(int*)dPtr;

	(double*)iPtr;

	*iPtr = 5.5;
	*dPtr = 5;

	cout &lt;&lt; *iPtr &lt;&lt; endl &lt;&lt; *dPtr;

return 0;
}
</code></pre>
<p>Hier kommt kein Compiler-Error. Hier sagt mir eine Fehlermeldung des Programms, dass die Variable iPtr ohne initialisierung benutzt wird. Versteh aber nicht warum. Sind hier die Casts falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083246</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:40:21 GMT]]></title><description><![CDATA[<p>nein aber du hast einen zeiger auf einen double(der irgendwohin in deinen speicher zeigt) und du weisst ihm einen wert zu und diesenw ert will der dahin schreiben wo er zufällig drauf zeigt. das wird crashen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083251</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:40:24 GMT]]></title><description><![CDATA[<p><div class="plugin-markdown"><input type="checkbox" id="checkbox21472" /><label for="checkbox21472">Du hast Casts verstanden</label></div><br />
<div class="plugin-markdown"><input type="checkbox" id="checkbox21471" checked="true" /><label for="checkbox21471">Du hast Casts nicht verstanden</label></div></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083252</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:51:31 GMT]]></title><description><![CDATA[<p>Gut, 314159265358979. Wenn ich Casts also nicht verstanden habe, dann bist du nun an der Reihe so effektiv wie möglich zu erklären. Nur noch nebenbei: Auf solche Antworten kann ich VERZICHTEN!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083265</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:51:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:53:20 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Hier kommt kein Compiler-Error. Hier sagt mir eine Fehlermeldung des Programms, dass die Variable iPtr ohne initialisierung benutzt wird. Versteh aber nicht warum. Sind hier die Casts falsch?</p>
</blockquote>
<p>Na, was wird die Warnung wohl bedeuten? Zeig doch mal auf die Stelle, an der iPtr ein Wert zugewiesen wird. Denk dran, iPtr und *iPtr sind ganz verschiedene Objekte.</p>
<p>Was die Casts angeht: <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="😕"
    /><br />
1. Ich kann dir sagen, die machen überhaupt nichts.<br />
2. Ich habe aber keine Ahnung, was sie überhaupt machen sollen. Erleuchte mich. Willst du dass dPtr seine Identität ändert und ein *int wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083268</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:53:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:55:00 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Auf solche Antworten kann ich VERZICHTEN!</p>
</blockquote>
<p>Bitte nicht nach Entschuldigungen betteln. An dem Zeitunterschied eurer Posts kannst du erkennen wer gemeint war.;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083269</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:55:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:55:33 GMT]]></title><description><![CDATA[<p>2. ist richtig, <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083271</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 13:56:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28805">@hmpf</a>: Ok. Dann hab ich das so nicht gemeint. Sorry, 314159265358979!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083272</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 13:56:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:01:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main()
{
	int * iPtr;
	double * dPtr;
	int test_int;
	double test_double;

	test_int = 5;
	test_double = 5.5;

	iPtr = (double*)iPtr;

	cout &lt;&lt; *iPtr &lt;&lt; endl &lt;&lt; *dPtr;

return 0;
}
</code></pre>
<p>Nochmal ein neuer Versuch. Ich hab grad in der Fehlermeldung gelesen, dass das irgendwie mit einem Links-Wert was zu tun haben muss. Leider funktionierts aber auch nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083274</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:05:12 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28805">@hmpf</a>: Ok. Dann hab ich das so nicht gemeint. Sorry, 314159265358979!</p>
</blockquote>
<p>Hoppla, jetzt muss ich mich entschuldigen. Habe dich mit Skym0sh0 verwechselt. Daher nur munter drauf auf diesen Pi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083279</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:09:00 GMT]]></title><description><![CDATA[<p>Eine Variable kann ihren Typ nicht ändern. Daher wird das so auch nicht funktionieren. Außerdem zeigen deine Zeiger ins Nirvana. Und überhaupt verwendest du C-Casts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083282</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:08:42 GMT]]></title><description><![CDATA[<p>@vip@r</p>
<p>Kannst du verbal ausdrücken, was du mit dieser Zeile erreichen willst:</p>
<pre><code class="language-cpp">iPtr = (double*)iPtr;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2083283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083283</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:09:42 GMT]]></title><description><![CDATA[<blockquote>
<p>Hoppla, jetzt muss ich mich entschuldigen. Habe dich mit Skym0sh0 verwechselt. Daher nur munter drauf auf diesen Pi.</p>
</blockquote>
<p>Mir ist das jetzt egal. Ich bin nicht sehr nachtragend.</p>
<p>Hab jetzt noch was gefunden. So geht's jetzt anscheinend. Der Sinn eines solchen &quot;Konstrukts&quot; bleibt mir allerdings verborgen, da das ja nix mit einer Typumwandlung zu tun hat, &quot;wie man sie gewöhnt&quot; ist.</p>
<pre><code class="language-cpp">int main()
{
	int test_int = 5;

	int *iPtr = &amp;test_int;

	double *dPtr = (double*)iPtr;

	cout &lt;&lt; *iPtr &lt;&lt; endl &lt;&lt; *dPtr;

return 0;
}
</code></pre>
<p>Es wandlet ja hier eigentlich nix um, in dem Sinn, dass man die gleiche Variable nur mit einem anderen Typ verwendete sondern viel mehr muss anscheinend nichts desto trotz eine neue Variable eingeführt werden... Irgendwie versteh ich das nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083286</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:10:23 GMT]]></title><description><![CDATA[<p>Das bringt hier nichts. vip@r, schau dir nochmals genau an, was Zeiger sind und wie man sie verwendet. Das Gleiche für Casts. Wenn du nur ausprobierst und irgendwas zusammendichtest, kommst du nicht weiter.</p>
<p><a href="http://magazin.c-plusplus.net/artikel/Pointer%20in%20C%28PlusPlus%29" rel="nofollow">Hier</a> gibts einen guten Artikel zu Zeigern, lies ihn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083287</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:11:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">iPtr = (double*)iPtr;
</code></pre>
<p>Ich wollte damit erreichen, dass die vormals int-Zeiger-Variable eine double-Zeiger-Variable wird. So wie man das mit &quot;normalen&quot; Variablen auch machen kann... In der Form wie:</p>
<pre><code class="language-cpp">int a;
	double b;

	(int) b;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2083291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083291</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:13:03 GMT]]></title><description><![CDATA[<p>Nein. Eine Variable behält ihren Typ immer. Das gilt sowohl für unqualifizierte, als auch für Zeiger und Referenzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083295</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:13:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:17:16 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>2. ist richtig, <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>.</p>
</blockquote>
<p>Oje, da kann ich mich fast nur 314159265358979 anschließen. Jedenfalls fehlt dir mehr Verständnis über Casts, als ich mir zutraue, dir beizubringen. Falls jetzt nicht ein sehr motivierter Forenteilnehmer einen Artikel über Casts schreiben möchte, kann ich dich eigentlich nur an ein Lehrbuch verweisen. Dir fehlen jedenfalls absolute Grundlagen.</p>
<p>Um zu deinem Problem zu kommen: Das geht so nicht. Du kannst nicht den Typen eines Bezeichners ändern. Du kannst nur ändern, als welcher Typ sich der Bezeichner in einer bestimmten Ausdruck verhält. Das nennt man dann Casten. Und das ist eigentlich etwas, was man nur äußerst selten braucht. Vielleicht mal ein Beispiel:</p>
<p>Wie du sicherlich nicht weißt, haben die meisten Computersprachen eine spezielle Division für Ganzzahlen:</p>
<pre><code class="language-cpp">int a = 10;
 int b = 3;
 cout &lt;&lt; a / b;   // Ergibt genau 3!
</code></pre>
<p>Was ist aber, wenn du lieber ein Fließkommaergebnis hättest? Dann musst du dem Compiler irgendwie klarmachen, dass a und/oder b sich in dem Ausdruck wie eine Fließkommazahl (z.B. double) verhalten sollen. Dazu kann man einen Cast benutzen:</p>
<pre><code class="language-cpp">cout &lt;&lt; static_cast&lt;double&gt;(a) / b;   // Ergibt 3.3333333333
</code></pre>
<p>Das <code>static_cast&lt;double&gt;(a)</code> macht, dass sich das a an der Stelle wie ein double verhält. Der Compiler sieht dann eine Division von double durch einen int (das b) und macht eine Fließkommadivision. Das static_cast bedeutet, dass dies eine &quot;unproblematische&quot; Umwandlung ist. Es ist absolut klar, dass der int mit dem Wert 10 einem double mit Wert 10. entspricht (achte auf den Punkt nach der 10). Es gibt auch noch andere Casts für andere Fälle, die erkläre ich aber hier nicht. In vielen Fällen deuten diese anderen Casts auch stark auf Designprobleme hin. Deine Pointerkonversionen die du im ersten Beitrag machen wolltest, gehen mit einem static_cast beispielsweise nicht, da braucht man den stärksten, den reinterpret_cast für, der dem Compiler sagt &quot;ich weiß das sieht für dich nach Müll aus, aber ich weiß genau was ich da tue&quot;. Entsprechend hätte dein Programm im ersten Beitrag dann Laufzeitfehler verursacht, denn wu wusstest nicht, was du da tust.</p>
<p>(Und noch ein Nachwort: Normalerweise würde man in dem Beispiel eher nicht casten, um eine Fließkommadivision zu erzwingen, sondern die Regeln zu Typenkonvertierungen in Rechnungen benutzen. Dazu würde man dann <code>1. * a / b</code> schreiben.)</p>
<p>edit: Da habe ich viel zu lange für den Beitrag gebraucht. In der Zwischenzeit hat sich im Thread einiges getan...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083299</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger-Problem? on Fri, 24 Jun 2011 14:16:47 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Ich wollte damit erreichen, dass die vormals int-Zeiger-Variable eine double-Zeiger-Variable wird. So wie man das mit &quot;normalen&quot; Variablen auch machen kann... In der Form wie:</p>
<pre><code class="language-cpp">int a;
double b;

(int) b;
</code></pre>
</blockquote>
<p>Genau das meine ich, dir fehlen essentielle Grundlagen über das C++-Typsystem. Solange du Typen und Variablen nicht verstehst, kannst du Zeiger gleich vergessen. Gesteh dir ein, dass du hier noch etwas Nachholbedarf hast, und nimm dir die Zeit, um die entsprechende Theorie nochmals gründlich anzuschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2083301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2083301</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 Jun 2011 14:16:47 GMT</pubDate></item></channel></rss>