Pointer und Arrays



  • Hallo mal wieder, muss aus einer bereits geöffneten Binär Datei die Anzahl der Messwerte lesen, sowie alles addieren und den Mittelwert bilden, und über die entsprechenden Pointer zurückgeben. Habe folgenden Code, der auch einwandfrei funktioniert, möchte ihn aber optimieren.

    void fMittelwert (FILE *datei_ptr,int *Anzahl, float *fMeanV)
    {                                          //Anzahl in main mit 0 vorbelegt.
    	float Messdaten[20];
    	int cnt = 0;
    	float fGesamt = 0;
    
    	while ((fscanf(datei_ptr,"%f",&Messdaten[cnt]))!=EOF) //Speichere jeden                             
    	{                                                    //gelesenen Wert ins Array und erhöhe.
    		fGesamt = fGesamt + Messdaten[cnt];     //Addiere alle Werte
    		cnt++;                                  //Erhöhe Counter
    	}
    
    	*Anzahl = cnt;              //Übergebe Anzahl an den Pointer
    	cnt = (float)cnt;           //Wandle cnt in Typ float
    	fGesamt = fGesamt/cnt;					//fGesamt wird zum Mittelwert Gemacht
    	*fMeanV = fGesamt;						//und an Pointer übergeben
    }
    

    Meine Frage, da ich den Pointer *Anzahl sowieso mit 0 vorbelegt übergeben bekomme, kann ich den doch auch für cnt erstzen oder? Wenn ja wie?
    Und Allgemein:

    *pointer = Zahl;
    

    ist doch Wertzuweisung?(Variable auf die Pointer zeigt wird mit Inhalt von Zahl belegt?)
    Was ist dann:

    pointer = zahl;
    

    ?
    und:

    pointer = &zahl;
    

    ? Pointer zeigt auf adresse?
    Wann benötige ich was?

    Vielen Dank im voraus!

    MfG

    zoro :p



  • void fMittelwert (FILE *datei_ptr,int *cnt, float *fGesamt)
    {                                      
        float ftmp;
        *cnt = 0;
        *fGesamt = 0;
    
        while( fscanf(datei_ptr,"%f",&ftmp)==1 ) 
        {                                                    
            *fGesamt += ftmp; 
            ++*cnt;                                
        }
    }
    


  • Danke für die schnelle Antwort,

    kannst du mir das noch mit den Pointer allgemein erklären? wie ganz unten gefragt?

    Danke!

    zoro



  • float *pointer, zahl, Zahl = 3.141;  // *pointer ist ein float
                                         //  pointer (ohne *) ist ein Zeiger auf float
    
    pointer = &zahl; // pointer zeigt jetzt auf die Variable zahl
    // Die Adresse von zahl wird in pointer abgelegt.
    // damit man den Zeiger sinnvoll einsetzen kann, muss er auf eine sinnvolle Stelle zeigen.
    
    // man kann jetzt über pointer, die Variable zahl ändern
    *pointer = Zahl;   // zahl enthält jetzt auch 3.141
    
    pointer = zahl; // ist Unfug. Du möchtest pointer die Adresse 3 unterjubeln.
    // Pointer sind Ganzzahlig und in zahl steht 3.141
    // du weißt nicht, was an Adresse 3 liegt und ob du überhaupt darauf zugreifen darfst.
    

    Pointer sind auch nur Variablen. Nur statt Zeichen oder Zahlen enthalten sie Adressen. Mit dem Dereferenzierungsoperator * greift man auf die Stelle zu, auf die der Pointer zeigt.

    ~@Wutz: Entweder die Summe durch Anzahl teilen (damit es der Mittelwert wird) oder Funktion in fSumme umbenennen.~



  • Geil Danke, jetzt hab ich das auch wieder verstanden!

    Gruß

    zoro



  • Da dein Titel für diesen Thread "Pointer und Arrays" ist, nochmal zur Erinnerung:

    Arrays sind keine Pointer und Pointer sind keine Arrays.



  • zoro schrieb:

    cnt = (float)cnt;           //Wandle cnt in Typ float
    

    Ähm. Nein? cnt ist ein int und bleibt ein int so lange es lebt. Dem kannst Zuweisen was du willst - es ist und bleibt ein int !!


Anmelden zum Antworten