Das geht gar nicht, weil Konstanten keine Adressen haben.
Während des Kompilierens werden einfach alle festgelegten Konstanten durch
ihren Wert im Code ersetzt.
Du kannst ja auch nicht die Adresse von der Zahl 4 ermitteln.
Beides sind Konstanten. Wieso geht das eine nicht, aber das andere?
Normalerweise würde aus Debug @#Konstante doch auch nur Debug @"Hallo" werden .
Und Konstanten haben sehr wohl eine Adresse, sonst ginge ja Debug @"Hallo" auch nicht. Die werden nur alle in einer section '.data' blah blah gespeichert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Eine Stringkonstante ist anders als andere Konstanten, weil ein String natürlich immer eine Adresse haben muss, denn das ist ja kein primitiver Datentyp. Bei einer Zahlkonstante wird aber nur der Wert Precompilermäßig ersetzt.
Zaphod hat geschrieben:Eine Stringkonstante ist anders als andere Konstanten, weil ein String natürlich immer eine Adresse haben muss, denn das ist ja kein primitiver Datentyp. Bei einer Zahlkonstante wird aber nur der Wert Precompilermäßig ersetzt.
Ja, aber #Konstante = "Hallo" ist immernoch eine String Konstante (Bei Zahlen geb ich dir recht). Wieso geht dann aber nicht @#Konstante wenn #Konstante = "Hallo"?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Na weil #MEIN_STRING ="Hallo" natürlich eine Adresse haben muss, ein String ist ja kein String sondern ein Pointer auf eine Speicherbereich von bestimmter länge.
#MEINE_LONGKONSTANTE = 4711 hat keine Adresse, weil das nach der Ersetzung einfach eine Zahl ist. Ich vermute (ich weiß es nicht) das Zahlkonstanten in PB nicht wie schreibgeschützte Variable wie zb in Java gespeichert sind, sondern wie Zahlliterale die du auch so in deinen Quelltext schreibst. Die haben dann ja nur eine Position in der Executable, aber keinen Bezeichner den man einfach so dereferenzieren kann.
Das wäre also genauso sinnvoll wie die Adresse von "5".
Zaphod hat geschrieben:Na weil #MEIN_STRING ="Hallo" natürlich eine Adresse haben muss
Eben das sag ich doch. Nur leider geht ja @#MEIN_STRING nicht, @"Hallo" aber schon!
@#MEIN_STRING (Wenn #MEIN_STRING = "Ein String" wie du sagst) führt zu einem Syntaxerror, @"Hallo" aber nicht.
#MEINE_LONGKONSTANTE = 4711 <- Da ist es mir doch klar warum es keine Adresse davon geben kann (Davon rede ich doch auch nicht, hab ich schon oben erwähnt). Aber bei #MEIN_STRING = "Ein String" muss es eine geben.
@NicTheQuick: Jo.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.