Sizeof(Float Array)
-
Hi,
habe ein Programm, dass einfach den Durchschnitt berechnen soll und ausgeben.
Meine Dateien sehen wie folgt aus:avg.h:
float avg(float values []);
avg.c:
#include "avg.h" float avg(float values[]) { const int NUM = sizeof(values)/sizeof(float); float sum = 0; for(size_t i=0; i < NUM; i++) { sum += values[i]; } return sum/NUM; }
main.c
#include <stdio.h> #include "avg.h" int main() { char str [80]; float values [] = {5.0, 2.0, 3.0, 4.0}; printf("Avg is %f", avg(values)); scanf_s ("%s", str); return 0; }
Er nimmt jedoch nur den ersten Wert aus dem Array... sizeof(values) ist 4 und er iteriert dann natürlich nur bis zum ersten Wert.
Warum liefert sizeof(values) einen "falschen" Wert?
-
Array-Parameter sind gleichbedeutend mit Zeigern, d.h. wenn du
float avg(float values[])
schreibst, ist das das gleiche wie
float avg(float *values)
(Das gilt so wirklich nur für Parameter, normalerweise sind Arrays und Pointer verschiedene Dinge.)
-
Gibt es denn eine Möglichkeit um die richtige größe des Arrays zu bekommen, ohne als Parameter die Anzahl der Elemente zu übergeben?
-
XinCode schrieb:
Gibt es denn eine Möglichkeit um die richtige größe des Arrays zu bekommen, ohne als Parameter die Anzahl der Elemente zu übergeben?
Ja, aber alle anderen Möglichkeiten laufen auch da drauf hinaus, dass du zwei Parameter brauchst oder zwei Werte in einen Parameter stopfst.
-
Was ist denn so schlimm daran, die Groesse des Arrays mitzuliefern? Gehört eigentlich ohnehin dazu, denn wenn du mit einem Array arbeiten willst, brauchst du gelegentlich auch die Groesse.