Array an Funktion übergeben

Safran

Grünschnabel
Hallo Community,

ich habe zwar mehrere Einträge zu meinem Problem gefunden, dennoch hat mich keiner zur Lösung bringen können.

Dabei ist mein Problem eigentlich recht einfach. Ich möchte einen Array einer Funktion übergeben können, so dass ich innerhalb der Funktion mit dem Array weiterarbeiten kann.

Code:
#include <stdio.h>
double zahlen[99];

double sortieren (double unsortiert[99]){

return 0;
}

int main (void){
	sortieren(zahlen[99]);
}

Ich weiß leider nicht, was die Fehlermeldung "Konvertierung des Parameters 1 von 'double' in 'double []' nicht möglich" bedeuten soll.

Vielen Dank für eure Hilfe!
 
Ich weiß leider nicht, was die Fehlermeldung "Konvertierung des Parameters 1 von 'double' in 'double []' nicht möglich" bedeuten soll.
Du greifst dort auf das 100. Element des Arrays zu - und das ist nunmal ein double. Dein Code wäre äquivalent zu:
C:
double zahlen[99];

double d = zahlen[99];
sortieren(d); // Fehler!
Außerdem gibt es das 100. Element in deinem Array gar nicht, da das Array nur 99 Elemente hat. (also von 0 bis 98)
C:
sortieren(array);
Gruß
 
Du greifst dort auf das 100. Element des Arrays zu - und das ist nunmal ein double. Dein Code wäre äquivalent zu:
C:
double zahlen[99];

double d = zahlen[99];
sortieren(d); // Fehler!

Hmm, mir ist jetzt mehr oder weniger klar geworden warum es nicht funktionieren kann. Allerdings verstehe ich nicht, an welcher Stelle versucht wird auf den 100. Eintrag zuzugreifen. Ist aber auch egal, da ich ja verstanden habe, dass es nicht funktioniert ;-)

C:
sortieren(array);

Huch, verstehe ich jetzt nicht. Schreibe ich das genauso in meinen Quelltext? Wohl eher kaum, da er, wenn es so sein sollte, ja nicht wüsste welches array.
Habe ich es richtig verstanden, dass ich einen Array in meinem obigen Codebeispiel mit

C:
sortieren(zahlen);

an die Funktion "sortieren" übergeben würde?


Soweit zu den Verständnissfragen. :)

Ich bin das ganze aber nun anders angegangen. Den Array habe ich einfach global definiert und greife auf diesen über Pointer innerhalb meienr Funktion drauf zu. Das funktioniert soweit auch ganz gut.

Jetzt wollte ich eine kleine Funktion schreiben, die das Verfahren "Sortieren durch Auswahl" auf einen Array anwendet.
Dabei soll sie in meinem Fall zuerst das Minimum der Folge a0-a99 bestimmen und an die Stelle a0 schreiben. Dann Soll sie das Minimum der Folge a1-a99 bestimmen und an die Stelle a1 schreiben, usw.

Ich habe nun folgenden Code geschrieben, der allerdings keinen sortierten Array zurück gibt. Selbst anch sorgfältigem debugen habe ich den Fehler nicht gefunden. Weiß jemand vielleicht noch einen kleinen Rat?

Danke!

C:
#include <stdio.h>
double zahlen[99] = {3, 4, 2, 8, 12, 11, 98, 35};
short k, i;

double sortieren (double *unsortiert){

	for (i=0; i<100; i++){	
		double min = zahlen[i];

		for (k=0; k<100; k++){
			if (*(unsortiert+k) <= min){
				min = *(unsortiert+k);
				double zwischenspeicher = *(unsortiert+i);
				*(unsortiert+i) = min;
				*(unsortiert+k) = zwischenspeicher;
			}
			else{
				continue;
			};
		};
	};
		
		for (k = 0; k<100; k++){
			printf("%lf \n", *(unsortiert+k));
		};

return 0;
}

int main (void){
	double *pzahlen = zahlen;
	sortieren(pzahlen);
}

Edit: Fehler gefunden! Muss natürlich heißen:
C:
for (k=i; k<100; k++){
 
Zuletzt bearbeitet:
Hmm, mir ist jetzt mehr oder weniger klar geworden warum es nicht funktionieren kann. Allerdings verstehe ich nicht, an welcher Stelle versucht wird auf den 100. Eintrag zuzugreifen.
array[99] bezeichnet nunmal das 100. Element.
Huch, verstehe ich jetzt nicht. Schreibe ich das genauso in meinen Quelltext?
Ich meinte statt array natürlich dein Array namens zahlen
Habe ich es richtig verstanden, dass ich einen Array in meinem obigen Codebeispiel mit

C:
sortieren(zahlen);

an die Funktion "sortieren" übergeben würde?
Ja.

Gruß
 
Moin,

da Du ja scheinbar mit Arrays nicht ganz so vertraut bist, hier mal zur Klarstellung:

Code:
(1) double zahlen[99];
(2) double d = zahlen[99];

Zeile (1) deklariert ein Array mit 99 double-Werten, die aber von 0 bis 98 indiziert sind (also zahlen[0] bis zahlen[98]) ! ! !
In Zeile (2) versucht Du somit der Variablen "d" den Wert von "zahlen[99]" - also den 100. Wert des Arrays - zuzuweisen, was eben nicht gehen kann, da es ihn nicht gibt ! ! !

Gruß
Klaus
 
Zuletzt bearbeitet:
Zurück