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.


  • Mod

    @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.


Log in to reply