Pointer als Rückgabewert von Funktionen!!!!



  • Hallo!!!

    Ich schon wieder 😃 ! Und hab natürlich wieder ein Problem!

    Aufgabenstellung:

    Schreiben Sie ein Programm, mit dem Sie 5 double-Werte über die Tastatur eingeben. Drehen Sie Reihenfolge um und erstellen Sie eine Funktion, die als Rückgabewert einen Pointer auf das neue Array liefert.

    Und, wie ihr euch denken könnt 😃 , funktioniert bei mir das natürlich nicht 😞 .
    Das Problem ist das die Funktion die den Pointer zurückliefert anscheinend eine falsche Adresse zurückgibt.Wenn ich nämlich nachher die Funktion
    ausgeben möchte kommt bei Eingabe von 12345 - 10123 heraus. Statt 54321!

    Und daher stellt sich die Frage ob man Pointer überhaupt zurückgeben kann?

    #include <stdio.h>
    
    double function(double *p_dP);
    
    int main()
    {
    	double dArray[5];
    	int i;
    	double *p_dPointer;
    	double Wert;
    
    	p_dPointer=&Wert;
    
    	dArray[0]=0.0;
    	for(i=0;i<5;i++)
    		{
    		printf("Geben Sie bitte den Wert des %d.Array ein\n",i+1);
    		scanf("%lf",&dArray[i]);
    		}
    
    	*p_dPointer=function(dArray);
    
    	for(i=0;i<5;i++)
    		{
    		printf("%d.Wert: %lf\n",i+1,*(p_dPointer+i));
    		//printf("%lf",dArray[i]);
    		}
    
    }
    
    double function(double *p_dP)
    {
    	int i;
    	double *p_dP2;
    	double dArray2[5];
    
    	p_dP2=dArray2;
    
    	for (i=0;i<5;i++)
    		{
    		dArray2[i]=*(p_dP-i+4);
    		printf("%lf\n",dArray2[i]); /*Überprüfung ob er das richtige ausgibt*/
    		}
    	return *p_dP;
    }
    


  • p_dPointer=function();

    double *function()
    {
    }



  • #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