nummeretischer typ mit grösse eines zeigers
-
tickbereich schrieb:
Wenn du auch multiplizieren möchtest, hätte ich etwas in der Art
typedef unsigned long rawpointer;gemacht.
64-bit system?
-
gute_frage schrieb:
wie würdet ihr einen nummeretischen typ mit der grösse eines zeigers machen?
Gar nicht.
Gegenfrage: Was hast du mit so einem Datentyp überhaupt vor?
-
CStoll schrieb:
Gegenfrage: Was hast du mit so einem Datentyp überhaupt vor?
der parameter num aus memset sollte doch so sein, nicht?
-
gute_frage schrieb:
der parameter num aus memset sollte doch so sein, nicht?
Ich glaube du hast da etwas nicht ganz verstanden...
-
wieso? auf einem 64-bit system ist ein zeiger doch 8 bytes gross. und auf nem 32-bit sys nur 4. und ulong ist immer 4 bytes gross.
-
gute_frage schrieb:
CStoll schrieb:
Gegenfrage: Was hast du mit so einem Datentyp überhaupt vor?
der parameter num aus memset sollte doch so sein, nicht?
Welcher von den Parametern wäre das jetzt? memset übernimmt einen Zeiger (Anfangsadresse des zu setzenden Bereiches) einen Wert zum Reinschreiben(da übergibst du zwar einen int, das aber als char behandelt wird) und die Anzahl - da brauchst du keinen "numerischen typ mit grösse eines zeigers".
PS: Und wie groß ein Zeiger ist, weiß nur dein Compiler

-
bei der anzahl dachte ich. aber wenn die anzahl ein long ist dann hat er 4'294'967'296 (= 4gb) maximale länge. wenn der nutzer jedoch 16 gb im pc hat wie soll ich das dann mit einem long ansprechen?
-
Ich denke, mit "C++0x will support intptr_t, too. The introduction of intptr_t is chiefly important in 64-bit computing."...
wird Deine Suche schnell zum Erfolg führen.Ansonsten einfach nach trickbereich
typedef unsigned long rawpointer;//Klappt fast immerund zur Sicherheit
#if defined(__WIN32__) || defined(__WIN64__) static_assert(sizeof(rawpointer)==sizeof(void*),"Es ist ein schwerwiegender Fehler aufgetreten. Bitte kontaktieren Sie Ihren Administrator."); #else static_assert(sizeof(rawpointer)==sizeof(void*),"sizeof(rawpointer)!=sizeof(void*), please repair the typedef"); #endif
-
gute_frage schrieb:
bei der anzahl dachte ich. aber wenn die anzahl ein long ist dann hat er 4'294'967'296 (= 4gb) maximale länge. wenn der nutzer jedoch 16 gb im pc hat wie soll ich das dann mit einem long ansprechen?
Es gibt size_t und ptrdiff_t als systemspezifische Datentypen - die werden auch vom System verwendet, um Größen von Speicherbereichen bzw. Abstände zwischen Zeigern darzustellen. (btw, der dritte Parameter von memset() ist auch ein size_t)
-
volkard schrieb:
"Es ist ein schwerwiegender Fehler aufgetreten. Bitte kontaktieren Sie Ihren Administrator."
Interessante Fehlermeldung bei einem Static Assert

Edit: Ich hab wahrscheinlich nur den Witz nicht verstanden...
-
intptr_t und uintptr_t gibt es bereits in TR1, im Header <cstdint>.