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 einint
und bleibt einint
so lange es lebt. Dem kannst Zuweisen was du willst - es ist und bleibt einint
!!