void * als Funktion Parameter



  • Hallo,

    die Pointer bringen mich wieder durcheinander. Ich möchte in der Funktion main() die Adresse einer Variable ausgeben und die gleiche Adresse möchte ich in der anderen Funktion sehen. Was ich bis jetzt gemacht habe:

    // datei_1.cpp
    //
    
    // includes etc...
    
    int main ()
    {
    
       // Verschachtelte Strukturen...
       //
       struct A__BC tA__BC;
       struct ABC *pABC = &(tA__BC.stXY);
    
       printf ("in der __FILE__ %p\n", pABC->a);
    
       ShowAddress (pABC);
    
       return 0;
    
    }
    

    Die Funktion ShowAddress() wird meinem Wunsch nach alle mögliche Variablen akzeptieren, weil ich dann im Rumpf die Varianlen "caste".

    // datei_2.cpp
    //
    void ShowAddress (void *pnIn)
    {
       printf ("%p\n", &(((struct ABC *)pnIn)->a));
    };
    

    Die Fehlermeldung:

    passing arg 1 of `ShowAddress' from incompatible pointer type

    Danke für die Hilfe!



  • Ohne jetzt genauer den Rest des Codes betrachtet zu haben: du musst bei der Übergabe nach void* casten, sonst nimmt er das nicht, wie du gemerkt hast.

    ShowAddress ((void*)pABC);
    


  • _matze schrieb:

    Ohne jetzt genauer den Rest des Codes betrachtet zu haben: du musst bei der Übergabe nach void* casten, sonst nimmt er das nicht, wie du gemerkt hast.

    ShowAddress ((void*)pABC);
    

    Die Fehlermeldung ist immer die gleiche.



  • typedef struct 
    { 
    	int x;
    }myStruct;
    
    void ShowAddress (void *pnIn) 
    { 
    	printf ("%p\n", &pnIn); 
    };
    
    int main() 
    {
    	myStruct mystruct;
    	ShowAddress((void*)&mystruct);
    
    	getchar();
    
    }
    

    Funktioniert.



  • _matze schrieb:

    Ohne jetzt genauer den Rest des Codes betrachtet zu haben: du musst bei der Übergabe nach void* casten, sonst nimmt er das nicht, wie du gemerkt hast.

    ShowAddress ((void*)pABC);
    

    Falsch. Jeder Zeiger-Typ ist implizit nach void* konvertierbar.



  • Übersetz das ganze mal mit einem richtigen C-Compiler, bzw. nenne Deine Datei *.c und nicht *.cpp. Dann muss man da nichts casten, und dann sollte das auch funktionieren.



  • Ok, ich habe den Fehler gefunden. Der Beispiel hier im Forum müsste auf jeden Fall fehlerfrei sein. Mein Forum-Beispiel habe ich richtig gebastelt, leider im lokalen Code habe ich in der Funktion ShowAddress() anstatt der "void *"-Variable die "int *"-Variable benutzt und die Variable "a" war short int... :xmas2:

    Tut mir leid für die Turbulenzen!


Anmelden zum Antworten