Pointer als Rückgabewert von Funktionen!!!!



  • #include <stdlib.h> // malloc( ) und free( )
    #include <stdio.h>
    
    // double function(double *p_dP);
    // du willst doch keine double zurückgeben
    // sondern einen Pointer auf double, also:
    double* function( double *p_dP );
    
    int main()
    {
        int i, result;
        double dArray[ 5 ];
        double *p_dPointer;
    
        // double Wert;       wofür!?
        // p_dPointer=&Wert;  wofür!?
    
        dArray[ 0 ] = 0.0;
    
        for( i = 0; i < 5; i++ ) {
    
            // Fehlerprüfung wäre nicht zu verachten:
            do {
    
                // printf("Geben Sie bitte den Wert des %d.Array ein\n",i+1);
                // wohl eher:
                printf( "Geben Sie bitte Wert %d des Arrays ein\n", i + 1 );
    
                result = scanf( "%lf" , &dArray[ i ] );
    
                if( result != 1 )
                    while( getchar( ) != '\n' )
                        ;
    
            } while(  result != 1 );
        }
        p_dPointer = function( dArray );
    
        printf( "\n" );
    
        for(i = 0; i < 5 ; i++ ) {
    
            // printf( "%d. Wert: %lf\n", i + 1, *(p_dPointer+i) );
            // geht auch so (nicht so kryptisch ):
            printf( "%d. Wert: %lf\n", i + 1, p_dPointer[ i ] );
        }
    
        // das von function( ) angeforderte Array wieder freigeben:
        free( p_dPointer );
    }
    
    double* function(double *p_dP)
    {
        int i;
    
        /*
        double *p_dP2;
        double dArray2[5];
        */
    
        // p_dP2 = dArray2;  wofür?.
    
        // ein neues Array dynamisch (!!) erstellen:
        double *array = (double*) malloc( 5 * sizeof( double ) );
    
        /*
        for ( i = 0; i < 5 ; i++ ) {
    
            dArray2[i]=*(p_dP-i+4);
            printf("%lf\n",dArray2[i]); // Überprüfung ob er das richtige ausgibt
        }
        */
    
        for( i = 0; i < 5; ++i ) {
    
            array[ i ] = p_dP[ 4 - i ];
        }
    
        //return *p_dP; hier würdest du die erste double des "Arrays" p_dP zurückgeben ( p_dP[ 0 ] )
        return array;
    }
    

    Greetz, Swordfish



  • Swordfish schrieb:

    fflush( stdin );
    

    Autsch.



  • TactX schrieb:

    Swordfish schrieb:

    fflush( stdin );
    

    Autsch.

    Hallo TactX,

    in meiner Ausbildung wurde mir in der Schule auch dieses fflush(stdin); beigebracht. Aus Interesse: Was ist an dieser Befehlszeile schlecht? Welche Nachteile gibt es da, und wie kann man es besser umsetzen?

    Sry für OT aber das interessiert mich nun 🙂

    Lyrix



  • @TactX:

    a wise man schrieb:

    You can't tell an old god new tricks

    Man möge mir verzeihen. 😉

    ^ Post darüber geedited.

    Greetz, Swordfish



  • @Lyrix: Guckst du FAQ!? ➡ C/C++ Forum :: FAQ - ANSI C :: fflush(stdin); ??

    Greetz, Swordfish



  • you can't teach an old dog new tricks
    noch bist du kein gott, das kommt aber vielleicht noch.



  • Lyrix schrieb:

    in meiner Ausbildung wurde mir in der Schule auch dieses fflush(stdin); beigebracht.

    Das wurde mir sogar im Studium beigebracht 😃

    Lyrix schrieb:

    Aus Interesse: Was ist an dieser Befehlszeile schlecht?

    Das hat Swordfish ja geklärt.

    Lyrix schrieb:

    Welche Nachteile gibt es da, und wie kann man es besser umsetzen?

    void myflush{
      int c;
      while ((c=getchar())!='\n' && c!=EOF);
    };
    

    Der Hintergrund warum es in Büchern und in der Lehre so oft vorkommt: Microsoft hat in seinen Compilern eben diese tolle Erweiterung gemacht, so dass bei deren Compilern fflush(stdin) durchaus das macht was erwartet wird. Das macht den Code aber unportabel und das wollen wir hier im ANSI-C-Forum vermeiden.



  • c.rackwitz schrieb:

    you can't teach an old dog new tricks

    😃 😃 😃 Ich meinte eher einen Song der Bloodhound Gang und da heißt es - passend zum Kontext - "god".

    c.rackwitz schrieb:

    noch bist du kein gott, das kommt aber vielleicht noch.

    ich bin halt Optimist... 😉

    Greetz, Swordfish



  • Swordfish schrieb:

    @Lyrix: Guckst du FAQ!? ➡ C/C++ Forum :: FAQ - ANSI C :: fflush(stdin); ??

    Greetz, Swordfish

    Danke dir Swordfish.

    @TacX:
    Nun stellt sich mir die Frage, wieso Dozenten/Lehrer, die ja eigentlich Ahnung von der Materie haben sollten do einen "Stumpfsinn" beibringen !?!



  • Lyrix schrieb:

    @TacX:
    Nun stellt sich mir die Frage, wieso Dozenten/Lehrer, die ja eigentlich Ahnung von der Materie haben sollten do einen "Stumpfsinn" beibringen !?!

    Ja, diese Frage habe ich mir auch schon gestellt. Das Problem liegt wohl beim Wort "sollten" 😉


Anmelden zum Antworten