Zeiger auf Zahlen vs. Zeiger auf Strings

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
4Planes
Beiträge: 37
Registriert: 19.11.2020 17:08

Zeiger auf Zahlen vs. Zeiger auf Strings

Beitrag von 4Planes »

Hallo!

Ich habe eine einfache Frage:
Warum geht das?
*var_Pointer = @"This is a string"
Debug PeekS(*var_Pointer)

Aber das nicht?
*var_Pointer = @1234567890
Debug PeekI(*var_Pointer)
Das Zweite geht nur über den Umweg:
var_Zahl.i = 1234567890
*var_Pointer = @var_Zahl
Debug PeekI(*var_Pointer)
Die Fehlermeldung, die PB für den zweiten Codeschnipsel anzeigt, ist übrigens recht interessant - und verwirrend:
Eine Prozedur kann auf PowerPC Prozessoren nicht mehr als neun Parameter haben.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Zeiger auf Zahlen vs. Zeiger auf Strings

Beitrag von NicTheQuick »

Strings werden nach der Kompilierung in einer Datasection, meist gegen Ende des resultierenden Binary gespeichert. Das heißt jede Repräsentation eines Strings ist sowieso immer ein Pointer auf einen Speicherbereich, in dem dieser liegt.
Bei Zahlen ist das nicht so. Die passen wunderbar in ein einzelnes Prozessor-Register und müssen nicht referenziert werden. Deswegen kann man von ihnen auch nicht direkt einen Pointer "nehmen", sondern nur dann, wenn ihr Wert in einer Variablen gespeichert ist, die sich an einer definierten Stelle im Speicher befindet.
Bild
Benutzeravatar
4Planes
Beiträge: 37
Registriert: 19.11.2020 17:08

Re: Zeiger auf Zahlen vs. Zeiger auf Strings

Beitrag von 4Planes »

Danke für die flotte Antwort! :allright:
Antworten