Announcement

Collapse
No announcement yet.

Adresse einer Variable in TEdit

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Adresse einer Variable in TEdit

    Um das Theme mit den Zeigern zu Verstehen möchte ich jetzt einiges ausprobieren und bin dabei auf (für mich) folgendes Problem gestoßen.

    Wenn ich den Inhalt einer int Variable mit einem Zeiger in einem Edit-Feld anzeigen möchte dann mache ich das so: (und das funktioniert auch):

    Code:
    EInhalt->Text = IntToStr(*pZahl1); // ich weiß das man mit dem * auf dem Inhalt der gezeigten Variable zugreifen kann
    wenn ich aber die Adresse der Variable in ein Edit-Feld anzeigen möchte, versuche ich das so: (funktioniert aber nicht):

    Code:
    EAdresse->Text = IntToStr(pZahl1); // ich weiß das man ohne dem * auf die Adresse der Variable zugreifen kann
    Kann mir jemand bitte erklären, warum das nicht funktioniert und wie ich das besser machen könnte?
    Lerne aus den fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.

  • #2
    EAdresse->Text = IntToStr((int)&pZahl1);

    Comment


    • #3
      Originally posted by Henri van de Velde View Post
      EAdresse->Text = IntToStr((int)&pZahl1);
      Vielen Dank

      Wieso muss ich hier das & Zeichen nehmen?

      Wenn ich da jetzt als Wert "1241780" raushabe dann ist das die Adresse der Variable im RAM, oder?

      ---------------------------------------------------------------------------------------------------

      Ich versuche mir das mit den Zeigern in meine Birne einzuprägen und zu verstehen.

      Ist meine folgende Überlegung zu Zeigern richtig?

      Immer wenn ich eine Variable aufrufe (berechnung, zuweisungen usw.) dann wird der Inhalt der Variable kopiert aber immer wieder in eine neue Adresse abgelegt.

      Wenn man die Variable zu oft aufrufen würde dann würde man immer mehr bytes im speicher (mit dem Kopierten Inhalt) belegen die erst bei der beendung des Programms wieder freigegeben werden.

      Man könnte theoretisch (wenn man die Adresse hat) auf jede der "kopierten" Variable zugreifen und bei jeder Adresse einen "veralteten" wert vorfinden.

      Ich kann/soll überall wo ich (als Anfänger) Variablen benutze, in Zukunft Zeiger benutzen da hier nur einmal der Speicher belegt wird und bei jeder Änderung und jedem Aufruf immer noch "die" Variable geändert wird, die ich am Anfrang "angelegt" habe.
      Zuletzt editiert von Rudi G; 13.08.2007, 15:59.
      Lerne aus den fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.

      Comment


      • #4
        Wieso muss ich hier das & Zeichen nehmen?
        Weil dies der sogenannte Adressoperator ist


        Immer wenn ich eine Variable aufrufe (berechnung, zuweisungen usw.) dann wird der Inhalt der Variable kopiert aber immer wieder in eine neue Adresse abgelegt.
        Nein, warum sollte das so sein??

        Mit der Anweisung

        int x=5;

        werden 4 Byte Speicher irgendwo im RAM angelegt. Die bleiben auch grundsätzlich solange erhalten, wie die Variable gültigkeit hat. Die Anweisung

        x+=3;

        wird in Maschinensprache in etwa so abgearbeitet:

        Hole aus der Speicherstelle x den Wert und packe ihn in ein Register.
        Addiere zum den Wert im Register 3 dazu.
        Packe den Wert aus dem Register wieder an die Speicherstelle zurück.

        Das kannst du mit untenstehendem Programm ganz leicht testen. Das Formular enthält zwei Editfeld und ein Button.

        Bitte beachte dabei immer den Gültigkeitsbereich der variablen


        Wenn man die Variable zu oft aufrufen würde dann würde man immer mehr bytes im speicher (mit dem Kopierten Inhalt) belegen die erst bei der beendung des Programms wieder freigegeben werden.
        Nein, s.o.


        Man könnte theoretisch (wenn man die Adresse hat) auf jede der "kopierten" Variable zugreifen und bei jeder Adresse einen "veralteten" wert vorfinden.
        Nein, s.o.

        Ich kann/soll überall wo ich (als Anfänger) Variablen benutze, in Zukunft Zeiger benutzen da hier nur einmal der Speicher belegt wird und bei jeder Änderung und jedem Aufruf immer noch "die" Variable geändert wird, die ich am Anfrang "angelegt" habe.
        Nein,s.o

        //---------------------------------------------------------------------------
        #include <vcl.h>
        #pragma hdrstop
        #include "Unit1.h"
        //---------------------------------------------------------------------------
        #pragma package(smart_init)
        #pragma resource "*.dfm"
        int x=2000;
        TForm1 *Form1;
        //---------------------------------------------------------------------------
        __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
        {
        Edit1->Text = IntToStr((int)&x);
        }
        //---------------------------------------------------------------------------
        void __fastcall TForm1::Button1Click(TObject *Sender)
        {
        x+=4;
        Edit1->Text = IntToStr((int)&x);
        Edit2->Text=x;
        }
        //---------------------------------------------------------------------------
        Zuletzt editiert von Christian Marquardt; 14.08.2007, 07:04.
        Christian

        Comment


        • #5
          Da habe ich ja alles falsch verstanden

          Originally posted by Christian Marquardt View Post
          Nein, warum sollte das so sein??
          Das habe ich in einem Forum gefunden aber als ich es heute nochmals angucken wollte wurde es von den Admins wegen "falschen" Infomationen gelöscht

          Originally posted by Christian Marquardt View Post
          Mit der Anweisung

          int x=5;

          werden 4 Byte Speicher irgendwo im RAM angelegt. Die bleiben auch grundsätzlich solange erhalten, wie die Variable gültigkeit hat. Die Anweisung
          Durch dein Beispielprogramm habe ich nun wirklich gemerkt das auch bei Namen eine Adresse und immer nur die Selbe angeprochen wird.

          Originally posted by Christian Marquardt View Post
          Das kannst du mit untenstehendem Programm ganz leicht testen. Das Formular enthält zwei Editfeld und ein Button.

          //---------------------------------------------------------------------------
          #include <vcl.h>
          #pragma hdrstop
          #include "Unit1.h"
          //---------------------------------------------------------------------------
          #pragma package(smart_init)
          #pragma resource "*.dfm"
          int x=2000;
          TForm1 *Form1;
          //---------------------------------------------------------------------------
          __fastcall TForm1::TForm1(TComponent* Owner)
          : TForm(Owner)
          {
          Edit1->Text = IntToStr((int)&x);
          }
          //---------------------------------------------------------------------------
          void __fastcall TForm1::Button1Click(TObject *Sender)
          {
          x+=4;
          Edit1->Text = IntToStr((int)&x);
          Edit2->Text=x;
          }
          //---------------------------------------------------------------------------
          Vielen Dank das Programm hat mir beim Verstehen wirklich sehr geholfen

          Nun leider fange ich mit den Zeigern von vorne an und bin da wo ich auch davor schon war. Ich weiß wie ich die Adresse von Variablen zuweisen kann und ich weiß wie ich mit den Zeigern auf den Inhalt zugreifen kann.

          ABER:

          Ich weiß noch immer nicht so richtig was ich mit den Zeigern anfangen soll/kann/muss

          Wieso soll man Zeiger verwenden?

          Wo ist der Unterschied?
          -Ich habe die Adresse der Variable, schön aber was soll/kann ich damit machen?
          Wann soll man Zeiger verwenden?

          Ich weiß echt nicht mehr weiter

          Ich habe in einem "C"-Buch gelesen das ich mir als Anfänger nicht weiter über den Sinn der Zeiger Gedanken machen soll, sondern das ich mit der "Sprache"-Erfahrung auch merken werde wofür ich die brauche. (z. B. komplexe Datenstructuren)

          Aber in dem C++ Buch aus dem ich lerne steht das ich das mit den Zeigern unbedingt verstanden haben muss bevor ich weiterlesen soll.

          Was soll ich tun? Bitte um Ratschläge & Tipps (wie habt ihr das gelernt usw...)

          Vielen Dank für eure Mühe

          Gruß
          Rudi G
          Lerne aus den fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.

          Comment


          • #6
            Wieso soll man Zeiger verwenden?
            Man MUSS keine Zeiger verwenden. Man kann prima in C/C++ programmieren ohne einen einzigen Zeiger zu nutzen. Sie sind ein Feature, was manchmal sicherliche eine Erleichterung ist,aber mit nichten ein Zwang.


            Außerdem benutzt du schon fleißig Zeiger. Jede Komponente die du in dein Formular ziehst, ist ein Objekt auf welches mit einem Zeiger zugegeriffen wird. Ein

            Edit1->Text="sfffd"

            ist die Nutzung eines Zeigers, nämlich EDIT1 ist der Zeiger.

            Ich weiß wie ich die Adresse von Variablen zuweisen kann und ich weiß wie ich mit den Zeigern auf den Inhalt zugreifen kann
            Und das reicht aus fürs erste.

            Also erstmal weitermachen und wenn du tatsächlich einen Zeiger benötigst, dann nachlesen oder fragen.
            Christian

            Comment


            • #7
              Originally posted by Christian Marquardt View Post
              Man MUSS keine Zeiger verwenden. Man kann prima in C/C++ programmieren ohne einen einzigen Zeiger zu nutzen. Sie sind ein Feature, was manchmal sicherliche eine Erleichterung ist,aber mit nichten ein Zwang.


              Außerdem benutzt du schon fleißig Zeiger. Jede Komponente die du in dein Formular ziehst, ist ein Objekt auf welches mit einem Zeiger zugegeriffen wird. Ein

              Edit1->Text="sfffd"

              ist die Nutzung eines Zeigers, nämlich EDIT1 ist der Zeiger.



              Und das reicht aus fürs erste.

              Also erstmal weitermachen und wenn du tatsächlich einen Zeiger benötigst, dann nachlesen oder fragen.
              Vielen Dank für diese super Erklärung und für die Info.

              Ich werde dann erstmal weiterlernen sowie du es mir empfohlen hast

              Vielen vielen Dank nochmals für all eure Hilfe
              Lerne aus den fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.

              Comment

              Working...
              X