Casten auf Zeiger! ist das erlaubt?
-
Hallo! eine kleine Frage, ist Catsen auf eine Zeiger erlaubt? sieh Code:
void *Datei; . . char *File=(char *)(Datei); . .
muss ich den Type von Datei zu "char" umwandeln, denn ich späte den Befehl "fopen" und "fread" benutzen möchte, jetzt die Frage: ist das in C erlaubt:
char *File=(char *)(Datei);
,
bis jetzt habe ich nur Typumwandelung zwischen z.B. "Float" und "int" gesehen, für Umwandelung auf Zeiger, habe ich noch nicht gehört.
-
hallo! problem gelöst!
Beispiel Code:/* void_ptr1.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int a = 10; char *string = "void-Zeiger"; void *ptr; /* void-Zeiger auf Variable int a */ ptr = (int *)&a; printf("ptr = %p a=%p\n",ptr,&a); /* void-Zeiger auf string */ ptr = (char *)string; printf("ptr = %p string = %p\n",ptr,string); return EXIT_SUCCESS; }
-
Generell: Wenns gar nicht gehen will, du dir aber sicher bist, dass die Typen stimmen, kannst du immer noch static_cast bzw. reinterpret_cast benutzen. reinterpret_cast überprüft nicht, sondern handelt nur
mfg, Hans
:schland:
-
Golem86 schrieb:
kannst du immer noch static_cast bzw. reinterpret_cast benutzen. reinterpret_cast überprüft nicht, sondern handelt nur
reinterpret_cast ??? sowas kennt mein C COmpiler nicht!
-
jetzt geht das wieder los
-
Was benutzt du denn für einen
Syntax ist z.B.:long long = 2345362; int* ip = reinterpret_cast<int*>(&k); int i = ip[0] //Erste sizeof(int) Bytes von k
Soweit ich weiß ist reinterpret_cast standardisiert.
mfg, Hans
-
Aber in ANSI/ISO C nicht so wirklich.
-
@Golem86: erinnere dich bitte daran, in welchem Forum du dich hier befindest. C++ hat hier im Allgemeinen nichts verloren, so wie umgekehrt reine C-Fragen im C++-Forum fehl platziert sind.
-
Galileo Computing C von A bis Z schrieb:
Ein Zeiger auf void ist ein typenloser und vielseitiger Zeiger. Wenn der Datentyp des Zeigers noch nicht feststeht, wird der void-Zeiger verwendet. void-Zeiger haben den Vorteil, dass Sie diesem eine beliebige Adresse zuweisen können. Außerdem kann ein void-Zeiger durch eine explizite Typenumwandlung in jeden anderen beliebigen Datentyp umgewandelt werden.
Laut dieser Beschreibung ist gerade das der Vorteil von void* Zeigern.
Quelle: http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_014_010.htm#RxxobKap014010040028C41F03A18C
P.s.: Hoffe das verlinken hier ist erlaupt, falls nicht tut es mir leid.