Frage zu int pointern



  • Tag allerseits!

    Tut mir leid, dass ich mit so einer trivialen Frage ankommen muss:

    Warum verändert das Unterprogramm im Folgenden code den pointer nicht?:

    #include <stdio.h>
    #include <conio.h>
    void Test(int*);

    int main(void)
    {
    int *a;

    a=23;
    printf("%i ",a);
    Test(a);
    printf("%i",a);
    getch();
    return 0;
    }

    void Test(int *b){
    b=10;

    return;}

    Die Ausgabe sieht so aus: 23 23

    Wäre nett wenn mir jemand sagen könnte wie ichs richtig mache!



  • Versuchs damit!

    #include <stdio.h>
    #include <conio.h> 
    
    int Test(int *b)
    {
     b=10;
     return b;
    }
    
    int main(void) 
    { 
    int *a; 
    
    a=23; 
    printf("%i ",a);
    printf("%i",Test(a));
    getch();
    return 0;
    }
    


  • 1. Benutze bitte codetags!
    2. schau dir nochmal das kapitel über pointer an!

    Dein Programm hat undefiniertes verhalten.

    int *a; 
    a=23;
    

    Du legst einen Pointer an, soweit ok, allerdings zeigt er noch "irgendwo" hin. Das kann z.B. ein speicherbereich irgendeines anderen Programms sein.
    Dann speicherst du dort was hinein! Und ende. an dem punkt kann das programm abstürzen oder halt sein eigenes ergebnis vrmurksen. Außerdem musst du den Pointer erst dereferenzieren wenn du einen wert drin speichern willst, ansonnsten änderst du die Adresse auf die der Pointer zeigt!!
    du musst dir erst mittels malloc() neuen eine adresse mit freiem speicher holen und das dem pointer zuweisen. da kannst dan deinen int reinspeichern (und nich vergessen den speicher wieder freizugeben!)

    #include <stdio.h>
    #include <conio.h>   // kein ANSI Standart!!
    #include <malloc.h>  // wird für malloc benötigt
    
    int main(void) 
    { 
    int *a;
    a = (int*)malloc(sizeof(int)); // freien speicher zuweisen
    *a=23;    // im speicher auf den a zeigt wird 23 gespeichert
    printf("%i ",a); 
    Test(a); 
    printf("%i",a); 
    getch();
    free(a) ;  // und wieder freigeben
    return 0; 
    }
    

    // EDIT *ARGHS* sry, da hab ich doch glatt C++ getippt ^^# *malschnell ändert*
    hoffe ich hab da jetzt nix verwurschtelt *gg*



  • Jo sorry hab das mit den Code Tags wohl zu spät gelesen.

    @Jack Daniels: Dein Code scheint zu funkionieren, ich bekomme aber immer noch drei Warnungen "Nicht-übertragbare Zeigerkonvertierung"

    @Freak

    Undefiniertes Symbol "new"



  • ja, gehört zu C++, sry hatte mich grad etwas versehen, habs jetzt eben geändert. 😉

    btw: deine testfunktion muss so aussehen:

    void Test(int *b)
    { 
    *b = 10;  //nicht vergessen zu dereferenzieren! ansonnsten zeigt der pointer nanach auf anderen speicher!
    return;  // kannst wechlasssen
    }
    


  • Alles klar danke!

    War nur noch ein Fehler in der Ausgabe

    Ich hab:

    printf("%i",a);
    

    in

    printf("%i",*a);
    

    geändert, sonst gibt er nämlich die Adresse aus!


Anmelden zum Antworten