C Array ohne feste Größe und weitere Fragen

DefconDev

Commander
Registriert
Jan. 2008
Beiträge
2.536
PHP:
#include<stdout.h>
#include<math.h>
double polval(double x, double a[], int n) 
{
	double ergebnis = 0.0;
	for (n; n >= 1; n--) 
       {
		ergebnis = (ergebnis + a[n]) * x;
	}
	ergebnis = ergebnis + a[0]; 

	return ergebnis;
}

Ich arbeite mich zurzeit in Java und c ein. Aber was ich gerade nicht verstehe warum "double a[]" keine feste größe besitzen muss, ich dachte man muss arrays sagen wie groß sie sein sollen. Ebenfalls verstehe ich nicht, wo die variable n, ihren wert her nimmt. Wieso muss man dieser keinen startwert zu weisen?
 
Zuletzt bearbeitet:
polval ist eine Funktion. Den Wert für n übergibst du beim Funktionsaufruf.
 
a besitzt ebenfalls keine feste Größe, da es sich um einen Parameter handelt, der ebenfalls seinen Wert beim Funktionsaufruf bekommt. Das übergebene Array muss dann entweder statischer Größe sein oder dynamisch mit malloc() angelegt worden sein.
 
Das ist simpel:

double a[] = double *a.

Also ist dein Parameter nur ein Pointer auf den ersten Eintrag deines Arrays (Reserviertem Speicher).
 
Zuletzt bearbeitet:
C behandelt Arrays als Pointer bei der Übergabe. Deswegen ist es der Funktion erstmal egal wie lang das Array ist, du übergibst nur die Adresse des ersten Array-Elements im Speicher.

Bitte nicht erschlagen falls mein Verständnis hier nicht richtig ist.
edit: Mist zu langsam.
 
Da is so ziemlich alles murks.
Was erhoffst du dir von n=n?
Und a[n] wird das Programm zum Absturz bringen denn wenn ein Array 6 groß ist darf man nicht a[6] machen sondern nur 0 bis 5.
 
DeinOpa schrieb:
polval ist eine Funktion. Den Wert für n übergibst du beim Funktionsaufruf.

Polval ist eine Funktion. Also sie ist vordefiniert in math. h? Soll heißen die macht die ableitungen von alleine?
Ergänzung ()

kuddlmuddl schrieb:
Da is so ziemlich alles murks.
Was erhoffst du dir von n=n?
Und a[n] wird das Programm zum Absturz bringen denn wenn ein Array 6 groß ist darf man nicht a[6] machen sondern nur 0 bis 5.

Ich habe es geändert. Danke dir :-)
 
n; bewirkt aber auch nichts.. kompiliert das ohne warnings?
n hat schon einen wert sobald die funktion polval aufgerufen hat. du kannst also auch for (;...) schreiben

wieso behandelst du den fall a[0] einzeln nach der for-schleife? lass n doch einfach bis 0 laufen
also statt n >= 1 dann n >= 0

wieso setzt du in der for eine klammer um ergebnis + a[n] aber danach nicht? du kannst sie in beiden fällen weglassen. bei int a = 5+7 würde man ja auch keine um 5+7 setzen

warum gibst du der funktion polval ein x? das wird doch nie benutzt

die erste { der for ist falsch eingerückt^^
 
Zuletzt bearbeitet:
a[0] darf nicht mit in die schleife, da sonst +a[0]*x gerechnet wird und es darf laut horner schema als letztes nur a[0] addiert werden.
Ergänzung ()

Also um es mal konkret zu machen, ich soll eine C-funktion schreiben die im allgemeinen das hornerschema beschreibt.

das array a soll meine koeffizienten abspeichern, als doublewerte. Die variable n ist mein exponent und mein index von a. Daher ein integerwert, nur ganzzahlige werte. Und x ist meine dritte variable.

a Index n * x^n.
 
Zurück
Oben