zeiger vergleichen



  • general bacardi schrieb:

    ...
    Muß auch nicht, weil die Begriffe schon immer eindeutig sind,
    das Selbe => x und y bezeichnen ein Ding
    das Gleiche => x und y sind 2 Dinge. beide haben gleiche Eigenschaften und keine Unterschiede
    ...

    Ich weiß nicht, was Du non diesem Thread schon gelesen hast, deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Ich weiß nicht, was Du non diesem Thread schon gelesen hast,

    Nur diese Seite.

    Simon2 schrieb:

    deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?

    Der Gleiche nicht, da jeder einmalig ist. Der Selbe ist man immer, unabhängig von anderen EInflüssen, Vorausgesetzt man bezieht sich auf Existenz und nicht auf umgangssprachliche Bedeutung von "Der Selbe"



  • general bacardi schrieb:

    Wenn beide Pointer gleich sind dann zeigen sie auf DAS SELBE Objekt

    Die Frage zielte aber auf den Umkehrschluss=
    ließ dir mal die Beispiele in den anderen Seiten durch, speziell die mit Mehrfachvererbung.

    B1      B2
       v       v
      D1B1    D1B2
         \   /
          \ /
           v
           C
    
    C* c = new C;
    
    D1B1* d1b1 = c;
    D1B2* d1b2 = c;
    
    B1* b1 = d1b1;
    B2* b2 = d1b2;
    

    Die Pointer zeigen alle auf dasselbe Objekt.
    Die Frage sind die Pointer gleich, ist wohl nicht so trivial, da die Adressen, auf die die Pointer zeigen andere sind.

    noch verwirrender wird es, wenn folgendes dazu kommt:

    BB
          / \
         /   \ 
        v     v
       B1      B2
       v       v
      D1B1    D1B2
         \   /
          \ /
           v
           C
    
    C* c = new C;
    
    D1B1* d1b1 = c;
    D1B2* d1b2 = c;
    
    B1* b1 = d1b1;
    B2* b2 = d1b2;
    
    BB* bb1 = b1 ;
    BB* bb2 = b2 ;
    

    Da die bb1 und bb2 auf unterschiedliche BB instanzen zeigen (keine virtuelle Vererbung)
    das gesammte Objekt ist immer noch dasselbe, dennoch wird ein Vergleich bb1 == bb2 wahrscheinlich false liefern.



  • vlad_tepesch schrieb:

    Die Frage sind die Pointer gleich, ist wohl nicht so trivial, da die Adressen, auf die die Pointer zeigen andere sind.

    Es ist trivial
    Wenn Pointer andere Inhalte haben dann zeigen sie auf VERSCHIEDENE Objekte, auch wenn ein Objekt eine exakte Kopie des anderen ist. Zwei Objekte können nicht gleichzeitig die selben Speicherzellen belegen und zwei Pointer können nicht unterschiedlich sein, wenn sie auf DAS SELBE Objekt zeigen



  • sag mal,
    ließt du dir auch mal durch, was andere schreiben?



  • vlad_tepesch schrieb:

    sag mal,
    ließt du dir auch mal durch, was andere schreiben?

    Hat das was isch sagte schon wer geschrieben?



  • Hi general,

    ich würde Dir dringend empfehlen, diesen Thread nochmal von Vorne zu lesen. Vieles von Deinen Ansätzen wurde hier schon ausreichend besprochen.

    Trotzdem wiederhole ich nochmal kurz für Deine letzten Statements:

    general bacardi schrieb:

    ...

    Simon2 schrieb:

    deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?

    Der Gleiche nicht, da jeder einmalig ist. ...

    Ich weiß jetzt nicht, wie das da reinpasst - wieso kannst Du jetzt nicht mehr der Gleiche sein wie vor 5 Minuten, "...weil jeder einmalig ist" ?

    general bacardi schrieb:

    ...Der Selbe ist man immer, unabhängig von anderen Einflüssen, ...

    Aber worauf gründest Du Diese Aussage? Immerhin hat sich Dein kompletter Körper verändert (Gehirnstrukturen umgebildet, Haut- und andere Zellen erneuert, Darmflora veränderet, Haar & Fingernägel gewachsen ....), Dein Wissenund Bewusstseinszustand, Du hast irreversible Entscheidungen gefällt, Dein Bankkonto hat evtl. nicht mehr denselben Stand, ...

    Was ist da noch "dasselbe" an Dir?

    general bacardi schrieb:

    ...Zwei Objekte können nicht gleichzeitig die selben Speicherzellen belegen ...

    Doch.
    Mal ein paar Möglichkeiten:
    - zu unterschiedlichen Zeitpunkten schon (nicht trivialer Einwand, wen man z.B. Multithreading und die technische Umsetzung von "Adresse holen" berücksichtigt)
    - Betriebssysteme dürfen zeitgleich verschiedenen Anwendungen denselben Adressraum anbieten ... auch wenn er "physikalisch" durch unterschiedliche Komponenten abgebildet wird (=> selbe Adresse unterschiedliche Objekte)
    - Betriebsysteme dürfen (und tun) Anwendungsadressräume "verschieben" (einfachstes Beispiel: Swapping) (=> "selbes Objekt" hat unterschiedliche "Adresse")

    BTW: Der C++-Standard sagt nichts über "Speicherzellen" - diese Begriff ist auch nicht wirklich hilfeich.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    general bacardi schrieb:

    ...

    Simon2 schrieb:

    deswegen wiederhole ich nochmal meine Frage: Bist Du nach dem Lesen dieses Posts noch derselbe wie vorher? Oder nur noch der Gleiche? Oder weder noch?

    Der Gleiche nicht, da jeder einmalig ist. ...

    Ich weiß jetzt nicht, wie das da reinpasst - wieso kannst Du jetzt nicht mehr der Gleiche sein wie vor 5 Minuten, "...weil jeder einmalig ist" ?

    Wenn ich "der Gleiche" von irgendwem wäre dann müßte es einen Doppelgänger geben.

    Simon2 schrieb:

    general bacardi schrieb:

    ...Der Selbe ist man immer, unabhängig von anderen Einflüssen, ...

    Aber worauf gründest Du Diese Aussage? Immerhin hat sich Dein kompletter Körper verändert (Gehirnstrukturen umgebildet, Haut- und andere Zellen erneuert, Darmflora veränderet, Haar & Fingernägel gewachsen ....), Dein Wissenund Bewusstseinszustand, Du hast irreversible Entscheidungen gefällt, Dein Bankkonto hat evtl. nicht mehr denselben Stand, ...
    Was ist da noch "dasselbe" an Dir?

    Bei einem Ding als Einheit sind Änderungen egal. Eine Tomate bleibt dieselbe Tomate auch wenn ich sie blau anmale. Es geht um die Existenz des Dings



  • general bacardi schrieb:

    ...
    Wenn ich "der Gleiche" von irgendwem wäre dann müßte es einen Doppelgänger geben....

    Du meinst also: Es gibt niemals "das Gleiche", sehe ich das richtig?

    general bacardi schrieb:

    ...Bei einem Ding als Einheit sind Änderungen egal. Eine Tomate bleibt dieselbe Tomate auch wenn ich sie blau anmale. Es geht um die Existenz des Dings

    Hier betreibst Du lediglich Begriffsverschiebung. Meine Frage entsprechend umformuliert lautet: Was ist "Existenz"?
    (und wie wird diese Begriff auf ein C++-Objekt zu übertragen sein?)

    BTW: Ich habe noch Einiges in meinen letzten Post geschrieben. Bitte lies das auch noch kurz, bevor Du antwortest.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    general bacardi schrieb:

    ...Zwei Objekte können nicht gleichzeitig die selben Speicherzellen belegen ...

    Doch.
    Mal ein paar Möglichkeiten:
    - zu unterschiedlichen Zeitpunkten schon (nicht trivialer Einwand, wen man z.B. Multithreading und die technische Umsetzung von "Adresse holen" berücksichtigt)
    - Betriebssysteme dürfen zeitgleich verschiedenen Anwendungen denselben Adressraum anbieten ... auch wenn er "physikalisch" durch unterschiedliche Komponenten abgebildet wird (=> selbe Adresse unterschiedliche Objekte)
    - Betriebsysteme dürfen (und tun) Anwendungsadressräume "verschieben" (einfachstes Beispiel: Swapping) (=> "selbes Objekt" hat unterschiedliche "Adresse")

    Wenn du zusätzliche Dimensionen einbringst, ja. Gespiegelter Speicher zB hat die eigenschaft dass man dasselbe Objekt an verschiedenen Adressen findet. (Aber niemals zwei gleiche Pointer auf unterschiedliche Objekte zeigen) Dein C/C++ Programm weiss von alldem aber nichts.

    Simon2 schrieb:

    general bacardi schrieb:

    ...
    Wenn ich "der Gleiche" von irgendwem wäre dann müßte es einen Doppelgänger geben....

    Du meinst also: Es gibt niemals "das Gleiche", sehe ich das richtig?

    Ja, Streng genommen gibt es, wenns um materielle Dinge geht, nichts "rein gleiches". Immateriell schon, 2+2=4, wenn a dann b -und- wenn b dann a, usw.
    http://de.wikipedia.org/wiki/Principium_identitatis_indiscernibilium

    general bacardi schrieb:

    Meine Frage entsprechend umformuliert lautet: Was ist "Existenz"?
    (und wie wird diese Begriff auf ein C++-Objekt zu übertragen sein?)

    Existenzbegriffe gibt es verschiedene. Mathematik hat einen, die Philosophie hat verschiedene. Für C/C++ muß noch einer erfunden werden. 😉



  • general bacardi schrieb:

    ...Wenn du zusätzliche Dimensionen einbringst, ...

    Das habe ich gar nicht. Du warst derjenige, der mit "Speicherzellen" um die Ecke kam.

    general bacardi schrieb:

    ...Aber niemals zwei gleiche Pointer auf unterschiedliche Objekte zeigen...

    Aber sicher: Niemand hindert ein Betriebssystem daran, zwei parlallel laufenden Anwendungen denselben Wertebereich als Anwendungsspeicher zur Verfügung zu stellen.
    Wenn beide Anwendungen zur selben Zeit denselben Zeigerwert als Objektadresse ausgeben, werden sie nach Deiner Definition sicher NICHT auf "dasselbe Objekt" verweisen.

    general bacardi schrieb:

    ...
    Existenzbegriffe gibt es verschiedene. ...Für C/C++ muß noch einer erfunden werden. 😉

    "Muss" vielleicht nicht ... aber ich behaupte auch nicht mehr als, dass genau dieser Begriff eben nicht vorhanden ist - und damit jede Aussage der Art "Ist doch vollkommen klar, wann etwas 'dasselbe Objekt' ist" nicht zutrifft.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    general bacardi schrieb:

    ...Wenn du zusätzliche Dimensionen einbringst, ...

    Das habe ich gar nicht. Du warst derjenige, der mit "Speicherzellen" um die Ecke kam.

    Die von dir erwähnten Dinge, Zeit, Betriebssystem, Multithreading, machen die Sache erst kompliziert.
    Speicherzellen sind lange nicht sowas abstraktes, sondern etwas, mit dem C/C++ sehr gut umgehen kann.

    Simon2 schrieb:

    general bacardi schrieb:

    ...Aber niemals zwei gleiche Pointer auf unterschiedliche Objekte zeigen...

    Aber sicher: Niemand hindert ein Betriebssystem daran, zwei parlallel laufenden Anwendungen denselben Wertebereich als Anwendungsspeicher zur Verfügung zu stellen.
    Wenn beide Anwendungen zur selben Zeit denselben Zeigerwert als Objektadresse ausgeben, werden sie nach Deiner Definition sicher NICHT auf "dasselbe Objekt" verweisen.

    Und wieder: Von virtuellem Speicher weiss ein C/C++ nichts. Wenn 2 Pointer in einem Programm zur gleichen Zeit den gleichen Inhalt haben, dann zeigen beide (innerhalb ihrer begrenzten Welt) auf DASSELBE objekt, oder auf eine andere Stelle im Speicher.

    Simon2 schrieb:

    general bacardi schrieb:

    ...
    Existenzbegriffe gibt es verschiedene. ...Für C/C++ muß noch einer erfunden werden. 😉

    "Muss" vielleicht nicht ... aber ich behaupte auch nicht mehr als, dass genau dieser Begriff eben nicht vorhanden ist - und damit jede Aussage der Art "Ist doch vollkommen klar, wann etwas 'dasselbe Objekt' ist" nicht zutrifft.

    Wir könnten versuchen einen neuen Zweig der Philosophie zu gründen, der sich mit C/C++ beschäftigt. 😃 Aber das halte ich für Blödsinn. 🙂



  • general bacardi schrieb:

    ...
    Speicherzellen sind lange nicht sowas abstraktes, sondern etwas, mit dem C/C++ sehr gut umgehen kann...

    Gibt's in C++ gar nicht. Und wenn Du Dir ansiehst, was technisch abläuft, um Speicher bereitzustellen, sind "Speicherzellen" sehr wohl hochgradig abstrakt.

    general bacardi schrieb:

    ...Wenn 2 Pointer in einem Programm zur gleichen Zeit den gleichen Inhalt haben, dann zeigen beide (innerhalb ihrer begrenzten Welt) auf DASSELBE objekt, ...

    Interessanterweise mischst Du hier 2 bisherige Ansätze zu "Identität": "Inhaltsgleichheit" und "Adressgleichheit".
    Klingt gut, ist aber
    a) (wie schon des Öfteren gesagt und Kernpunkt meiner Aussage) in C++ nicht so definiert (sondern Deine Privatdefinition) und
    b) in Konsequenz gar nicht so einfach zu realisieren.
    "Derselbe Zeitpunkt" hat nämlich nicht nur relativistisch betrachtet Grenzen, sondern schon durch die sequentielle Abarbeitung in einem Rechner: Ich kann üblicherweise gar nicht zu genau einem Zeitpunkt die Adresse zweier Objekte bestimmen und vergleichen.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Und wenn Du Dir ansiehst, was technisch abläuft, um Speicher bereitzustellen, sind "Speicherzellen" sehr wohl hochgradig abstrakt.

    Gut, man kommt vielleicht nicht an die kleinste atomare Einheit des Speichers heran, aber Du brauchst nur einen Pointer zu dereferenzieren und schon greifst du auf Speicher zu. Erhöhst du den Pointer um 1, kommst du an das nächste Element, usw. Immer aus der Perspektive von C/C++ betrachtet. Was Betriebssystem und Hardware daraus physikalisch machen, entzieht sich dem C/C++ Programm und ist für diese Betrachtung auch nicht wichtig. Im Standard wird von einer abstrakten Maschine gesprochen, für die das gilt.

    Simon2 schrieb:

    general bacardi schrieb:

    ...Wenn 2 Pointer in einem Programm zur gleichen Zeit den gleichen Inhalt haben, dann zeigen beide (innerhalb ihrer begrenzten Welt) auf DASSELBE objekt, ...

    Interessanterweise mischst Du hier 2 bisherige Ansätze zu "Identität": "Inhaltsgleichheit" und "Adressgleichheit".
    Klingt gut, ist aber
    a) (wie schon des Öfteren gesagt und Kernpunkt meiner Aussage) in C++ nicht so definiert (sondern Deine Privatdefinition) und
    b) in Konsequenz gar nicht so einfach zu realisieren.
    "Derselbe Zeitpunkt" hat nämlich nicht nur relativistisch betrachtet Grenzen, sondern schon durch die sequentielle Abarbeitung in einem Rechner: Ich kann üblicherweise gar nicht zu genau einem Zeitpunkt die Adresse zweier Objekte bestimmen und vergleichen.

    Das ist schon wieder sehr philosophisch und führt zu nichts. Es geht doch nur darum:

    1. Wir haben 1 Objekt, O
    2. Wir haben 2 Pointer, a, b
      Wenn a == b && a zeigt auf O. daraus folgt: b zeigt auf O.

  • Administrator

    @general bacardi,
    LIES DEN THREAD!

    Grüssli



  • general bacardi schrieb:

    ...

    1. Wir haben 1 Objekt, O
    2. Wir haben 2 Pointer, a, b
      Wenn a == b && a zeigt auf O. daraus folgt: b zeigt auf O.
    string* a;
    int* b;
    a = new string;
    b = new (a) int;
    

    hmmm ... selbes Objekt?
    Falls Du alle derlei Eventualitäten (vergiss Multithreadingszenarien nicht) "herausdefinieren" willst, wünsche ich viel Spaß .... auch mit dem verbleibenden "dasselbe-Begriff", der auf kaum ein reales Programm noch anwendbar sein dürfte. 😉

    Ansonsten: Lies den Thread!

    Gruß,

    Simon2.


Anmelden zum Antworten