Hilfe pointer/array , kein Rückgabewert [c Anfänger]



  • [quote="Wutz"]Beachte die Compiler-Warnungen und arbeite sie schrittweise ab.
    Wenn du keine erhältst, schalte die Warnstufe des Compiler hoch.[/quote]

    Ich benutze std=c99 und -Wall und erhalte keine Compiler Fehler, ich glaube es ist auch kein Compiler Fehler in meinem Code sondern irgendein Logik Fehler den ich nicht finde.

    Wie erhöhe ich den die Warnstufe?



  • Der Code kompiliert bei mir auch ohne Fehler und Warnungen, also nehme ich an, dass es sich um ein Verständnisproblem handelt.
    Wo genau hast du Probleme mit der sum-Funktionsaufgabe?



  • [quote="Singender Holzkübel"]Der Code kompiliert bei mir auch ohne Fehler und Warnungen, also nehme ich an, dass es sich um ein Verständnisproblem handelt.
    Wo genau hast du Probleme mit der sum-Funktionsaufgabe?[/quote]

    Ich muss in der sum-funktion die Summe aller zahlen im array errechnen und diese mithilfe des pointers (call by reference) ausgeben ohne rückgabewert. Ich erhalte aber anstatt 55 immer 64 , dauern addiert er die erste Zahl(9) im array doppelt.

    Deswegen hab ich das geühl das ich den Pointer vollkommen falsch verwende



  • regnur schrieb:

    Deswegen hab ich das geühl das ich den Pointer vollkommen falsch verwende

    Jep. Überleg Dir mal, in welcher Variable (aus main) die Summe berechnet wird.



  • regnur schrieb:

    Singender Holzkübel schrieb:

    Der Code kompiliert bei mir auch ohne Fehler und Warnungen, also nehme ich an, dass es sich um ein Verständnisproblem handelt.
    Wo genau hast du Probleme mit der sum-Funktionsaufgabe?

    Ich muss in der sum-funktion die Summe aller zahlen im array errechnen und diese mithilfe des pointers (call by reference) ausgeben ohne rückgabewert. Ich erhalte aber anstatt 55 immer 64 , dauern addiert er die erste Zahl(9) im array doppelt.

    Deswegen hab ich das geühl das ich den Pointer vollkommen falsch verwende

    Das Problem liegt am Aufruf deiner sum Funktion.
    Über das Argument p soll die Addresse deiner Variable übergeben werden, in der das Ergebnis der sum Funktion gespeichert wird.
    Du übergibst aber die Addresse deines Arrays, und nicht die einer Ergebnis-Variable.

    Deine sum Funktion erhöt also immer den Wert hinter p. p selbst aber zeigt dabei auf das erste Element deines Arrays. (Die Addresse eines Arrays ist auch die Addresse des ersten Elements in diesen Array)



  • [quote="Singender Holzkübel"]
    Das Problem liegt am Aufruf deiner sum Funktion.
    Über das Argument p soll die Addresse deiner Variable übergeben werden, in der das Ergebnis der sum Funktion gespeichert wird.
    Du übergibst aber die Addresse deines Arrays, und nicht die einer Ergebnis-Variable.

    Deine sum Funktion erhöt also immer den Wert hinter p. p selbst aber zeigt dabei auf das erste Element deines Arrays. (Die Addresse eines Arrays ist auch die Addresse des ersten Elements in diesen Array)[/quote]

    Danke , 👍 😃
    So jetzt habe ich deas richtige Ergebnis:
    int sum(int array[],int len,int *p) {

    int temp=0;
    for(int j=0;len>j;j++){
    temp += array[j] ;
    }
    return *p=temp;
    }

    nur wie übertrage ich den Wert ,ohne return und void anstelle des int ,in meine main so dass ich die Summe ausgeben kann? Also wie kann ich den Zeiger auf temp richten und dann ausgeben?



  • Danke euch nun ist laut uni Bot meine HA richtig , danke :D.

    void sum(int array[],int len,int *p) {

    int temp=0;
    for(int j=0;len>j;j++){
    temp += array[j] ;
    }
    *p = temp;
    }

    int main(){
    sum(array,len,&p);

    }

    nur verstehe ich die Fehlermeldung nicht;

    C:\Users\Cooltek\Desktop\Studium\Informatik\Hausaufgaben\ckurs\Blatt05\Vorgaben\ckurs_blatt05_aufgabe01.c In function 'main':
    65 2 C:\Users\Cooltek\Desktop\Studium\Informatik\Hausaufgaben\ckurs\Blatt05\Vorgaben\ckurs_blatt05_aufgabe01.c [Warning] passing argument 3 of 'sum' from incompatible pointer type [enabled by default]
    42 6 C:\Users\Cooltek\Desktop\Studium\Informatik\Hausaufgaben\ckurs\Blatt05\Vorgaben\ckurs_blatt05_aufgabe01.c [Note] expected 'int *' but argument is of type 'int **'



  • // ...
    int summe;
    
    sum(array, len, &summe);
    


  • [quote="Th69"]

    // ...
    int summe;
    
    sum(array, len, &summe);
    

    [/quote]

    Ah okey danke. 🙂



  • regnur schrieb:

    Th69 schrieb:

    // ...
    int summe;
    
    sum(array, len, &summe);
    

    Ah okey danke. 🙂

    Du solltest mal "BBCode in diesem Beitrag deaktivieren" deaktivieren 😉


Anmelden zum Antworten