C Array durch Funktion übergeben

kew

Ensign
Registriert
Apr. 2008
Beiträge
169
Hey... bin eher Anfänger bei C und komm nun nicht weiter... habe schon sehr lange gesucht aber leider nicht erfolgreich :(

Also folgendes Problem:
Code:
...
main () {
  double *datenvektor;             ????
  meinefunktion(&datenvektor);    ???
  printf("\n%f",datenvektor[0]);   ????
  return 0;
}

meinefunktion( *datenvektor) {
  for ... i ...
        *datenvektor[i]=zahl;
...
}

mein ziel ist es bei "meinefunktion" ein array zu erstellen. Dieses soll in der mein "geholt" werden. Zahl zurückgeben ist kein Problem. Aber bekomm es einfach nicht hin :(

Wäre dankbar wenn mir jmd helfen könnte :]
 
sorry aber mit diesen ... ist es einfach nicht nachzuvollziehen oO
array gibste ganz normal wie andere sachen zurück ... must du dann halt in der funktionsdeklaration den rückgabetyp auf das array ändern ...
fehlermeldung des compilers/debuggers w#re auch nützlich?

kann aber auch sein das ich in der falschen sprache grade bin xD
 
Wir denn überhaupt Speicher für das Array geholt?
Und wie sieht die Signatur von meinefunktion nun komplett aus? Der Datentyp fehlt.
Dort müsste ein Zeiger auf ein double-Zeiger sein.
 
habe überflüssiges raus getan sonst wäre es viel zu komplex :] ja stimmt ist double... :]
ja ne irgendwie ist es nicht gleich ob array oder einfache zahl...

z.b. folgendes funktioniert (ist leider kein array)

Code:
main () {
  double datenvektor;             ????
  meinefunktion(&datenvektor);    ???
  printf("\n%f",datenvektor);   ????
  return 0;
}

meinefunktion(double *datenvektor) {
  for ... i ...
        *datenvektor=zahl;
...
}
 
Zuletzt bearbeitet: (mehr)
main() {
double *datenvektor;
datenvektor = meinefunktion();
...
}

double *meinefunktion() {
//hier muss irgendwo ne int max gesetzt werden (evtl. im parameter übergeben)
double datenvektor[max];

//hier wird kram in das array geschrieben

return datenvektor; //ich bin mir nichtmehr sicher aber evtl. müsste hier return datenvektor[] stehen.
}
 
Zuletzt bearbeitet:
danke erstmal. hast recht. die variante würde gehen.
Aber eigentlich habe ich bei meinen funktion als standart immer rückgabewerte von 0 (richtig) 1 (falsch)... gibt es nicht die möglichkeit wie ich es beschrieben hatte !?
 
stimmt richtig. ich editiere mal den code.

So, also, ich habe meinefunktion() den Rückgabewert eines double-Pointers gegeben, damit kann ich einfach das Array zurückgeben, das das eigentlich ja auch nur ein Pointer auf das erste Array-Element ist.
Deine Möglichketi geht auch (mit ein paar änderungen zu deinem Code), aber im Sinne sauberer Programmierung ist es immer besser nur den Rückgabewert zu verändern um einen übersichtlichen Kontrollfluss zu erhalten, damit verringerst du nämlich Fehler.
 
Zuletzt bearbeitet:
Ich wiederhole mich: Ein Zeiger auf ein double-Zeiger.

@w-mann: Ich glaube der Code würde auch gar nicht funktionieren...
du vermischst dynamische und statische Speicherverwaltung.

Edit: Nachdenken! Das kann nicht funktionieren.
Du kommst hier ohne dynamische Speicherverwaltung nicht weit.
Das Array exisitert nur während die Funktion läuft, da es dort im Stack liegt.
Bei return verschwindet das Array vom Stack und der Zeiger zeigt wohin? Ins irgendwo...

Und bitte Code testen bevor man ihn postet...

Dynamisches Array heißt im Übrigen auch nur, dass es dymanisch angelegt wird.
Hier wird es beschrieben: http://www.win-tux.de/c_016_006.htm


Edit Wenn du von sauberer Programmierung sprichst wird mir aber Angst und Bange...



Sinnvoll wäre es wohl:
über malloc das Array dynamisch erstellen.
Bei Scheitern das Array freigeben und einen NULL-Zeiger zurückliefern.
Bei Erfolg ist das Ergebnis ungleich NULL.
Der Aufrufer der Funktion muss sich um die Freigabe des Arrays kümmern.
 
Zuletzt bearbeitet:
danke. nun hab ich es endlich begriffen :)
 
ach ja, der malloc-befehl natürlich in der funktion meinefunktion().
die frage ist halt, wie du dem aufrufer die größe des array mitteilst (eventuell über eine Endmarkierung), wenn du es so machst wie ich am ende oben geschrieben hab
 
Zurück
Oben