<?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 und lokale variablen]]></title><description><![CDATA[<p>hello. ich verstehe etwas mit den char zeigern und lokalen char variablen nicht ganz. beides ergibt irgendwie das gleiche <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> wenn ich das ganze mit dem typ int teste, kommt genau das erwartete ergebniss heraus. beispiel:</p>
<p><strong>int zeiger und lokale int variable</strong></p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void FunctionWithPointer(int *p_number)
{
	*p_number = 20;
}
//---------------------------------------------------------------------------
void FunctionWithoutPointer(int number)
{
	number = 20;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	int *number = new int;
    *number = 10;
    FunctionWithPointer(number);

    Edit1-&gt;Text = IntToStr(*number); //ausgabe gleich 20. Die variable wurde also direkt über den zeiger manipuliert.
    delete number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	int number = 10;
    FunctionWithoutPointer(number);

    Edit2-&gt;Text = IntToStr(number); //wie erwartet, ausgabe 10. Da hier ja nur eine kopie erstellt wird und kein zeiger übergeben wird.
}
//---------------------------------------------------------------------------
</code></pre>
<p>so habe ich das gelernt und so macht für mich das auch sinn. nur dort wo auch ein zeiger als parameter übergeben wurde kann der speicherinhalt geändert werden. bei einer kopie einer lokalen variable macht das ja keinen sinn oder verstehe ich etwas falsch? Nundenn... das beispiel mit einem char array:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void FunctionWithoutPointer(char other_local[14])
{
	other_local[0] = 'B'; //greifft nicht über einen zeiger auf &quot;local&quot; zu, ändert jedoch den inhalt!!?
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	char local[14];
    local[0] = 'A';
    FunctionWithoutPointer(local); //local wird als kopie übergeben!!?

    Edit2-&gt;Text = local; //unerwartete ausgabe: B
}
//---------------------------------------------------------------------------
</code></pre>
<p>wie gerade oben angesprochen trifft hier das phänomen ein. Aber eben nur mit einem typ char. Hier wird tatsächlich das lokale char array geändert. Ich sehe die logik irgendwie nicht warum das so sein soll und zudem auch nur bei einem char array oder char ansich. mit allen anderen elementarvariablen kommt sowas doch nicht vor? stehe nun echt auf dem schlauch.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138342/zeiger-und-lokale-variablen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 01:42:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138342.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 25 Feb 2006 15:49:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zeiger und lokale variablen on Sat, 25 Feb 2006 15:49:04 GMT]]></title><description><![CDATA[<p>hello. ich verstehe etwas mit den char zeigern und lokalen char variablen nicht ganz. beides ergibt irgendwie das gleiche <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> wenn ich das ganze mit dem typ int teste, kommt genau das erwartete ergebniss heraus. beispiel:</p>
<p><strong>int zeiger und lokale int variable</strong></p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void FunctionWithPointer(int *p_number)
{
	*p_number = 20;
}
//---------------------------------------------------------------------------
void FunctionWithoutPointer(int number)
{
	number = 20;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	int *number = new int;
    *number = 10;
    FunctionWithPointer(number);

    Edit1-&gt;Text = IntToStr(*number); //ausgabe gleich 20. Die variable wurde also direkt über den zeiger manipuliert.
    delete number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	int number = 10;
    FunctionWithoutPointer(number);

    Edit2-&gt;Text = IntToStr(number); //wie erwartet, ausgabe 10. Da hier ja nur eine kopie erstellt wird und kein zeiger übergeben wird.
}
//---------------------------------------------------------------------------
</code></pre>
<p>so habe ich das gelernt und so macht für mich das auch sinn. nur dort wo auch ein zeiger als parameter übergeben wurde kann der speicherinhalt geändert werden. bei einer kopie einer lokalen variable macht das ja keinen sinn oder verstehe ich etwas falsch? Nundenn... das beispiel mit einem char array:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void FunctionWithoutPointer(char other_local[14])
{
	other_local[0] = 'B'; //greifft nicht über einen zeiger auf &quot;local&quot; zu, ändert jedoch den inhalt!!?
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	char local[14];
    local[0] = 'A';
    FunctionWithoutPointer(local); //local wird als kopie übergeben!!?

    Edit2-&gt;Text = local; //unerwartete ausgabe: B
}
//---------------------------------------------------------------------------
</code></pre>
<p>wie gerade oben angesprochen trifft hier das phänomen ein. Aber eben nur mit einem typ char. Hier wird tatsächlich das lokale char array geändert. Ich sehe die logik irgendwie nicht warum das so sein soll und zudem auch nur bei einem char array oder char ansich. mit allen anderen elementarvariablen kommt sowas doch nicht vor? stehe nun echt auf dem schlauch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1002665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1002665</guid><dc:creator><![CDATA[RumbaRumba]]></dc:creator><pubDate>Sat, 25 Feb 2006 15:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger und lokale variablen on Sat, 25 Feb 2006 16:09:30 GMT]]></title><description><![CDATA[<p>RumbaRumba schrieb:</p>
<blockquote>
<p>wie gerade oben angesprochen trifft hier das phänomen ein. Aber eben nur mit einem typ char. Hier wird tatsächlich das lokale char array geändert.</p>
</blockquote>
<p>Das liegt ganz einfach daran, dass Arrays per Referenz übergeben werden. Vergl.: local == &amp;local[0]. D.h. hier wird einfach die Adresse des ersten Elements übergeben.</p>
<blockquote>
<p>Ich sehe die logik irgendwie nicht</p>
</blockquote>
<p>Kopieren entfällt. Und da das Kopieren bei c-style Arrays meistens sowieso nicht gewünscht ist, ist es das Default-Verhalten.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1002681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1002681</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Sat, 25 Feb 2006 16:09:30 GMT</pubDate></item></channel></rss>