Kleines Problem mit Variablen
-
Huhu!
Ich habe jetzt diesen Code hier geschrieben um endlich mal zu lernen richtig mit Variablen & Funktinne (ggf. Zeigern) zu arbeiten!
Nun möchten ich gerne "i" in die Funktion "Rechnenmiti" bringen, wie geht das?
#include <iostream> using namespace std; void Rechnen() { int i; i = 1+1; } void Rechnenmiti() { cout << i; } int main() { Rechnen(); Rechnenmiti(); return 0; }Ist nur ein sehr einfaches Beispiel, aber so versteh ich es wenigstens!
LG
-Lima-
-
Eine Variable ist nur in der Funktion bekannt, in der sie definiert ist (in diesem Fall
Rechnen()). Wenn du die Werte zwischen den Funktionen austauschen willst, helfen Parameter und Rückgabewerte:int Rechnen() { int i; i = 1+1; return i; } void Rechnenmiti(int i) { cout << i; } int main() { int v = Rechnen(); Rechnenmiti(v); return 0; }
-
Okay, ist ja garnicht schwer!!
Aber warum geht das mit Arrays nicht? Weil es nicht nur eine Zahl ist?
int Rechnen() { int Array[3]; for (size_t i=0;i<3;i++) { cin >> Array[i]; } return Array[3]; } int Rechnenmiti(int Array[3]) { for (size_t i=0;i<3;i++) { cout << Array[i]; } } int main() { int v = Rechnen(); Rechnenmiti(v); return 0; }LG
-Lima-
-
Limatex schrieb:
Weil es nicht nur eine Zahl ist?
Ja - und vor allem weil Arrays nicht per Wert übergeben werden, sondern nur Zeiger in die Arrays - aber die Parameter-Übergabe funktioniert trotzdem:
void Rechnen(int Array[], int size) // die Länge des Arrays ist dem Compiler egal { for (size_t i=0;i<size;i++) { cin >> Array[i]; } } void Rechnenmiti(int Array[], int size) { for (size_t i=0;i<size;i++) { cout << Array[i]; } } int main() { int v[3]; Rechnen(v,3) Rechnenmiti(v,3); return 0; }
-
es geht ürinzipiell genauso
bei dir gibst du aber nicht das array zurück sondern den 4. speicher des arrays (genau, du übergehst die array grenzen)der rückgabe typ deiner ersten funktion müsste int[] sein und dann müsstest du return Array; schreiben
-
Korrigier mal noch Deine Aufrufe, Du hast size vergessen.
Das könnte verwirren...
-
CStoll schrieb:
int Rechnenmiti(int Array[], int size) { for (size_t i=0;i<size;i++) { cout << Array[i]; } }void rechenmiti wär in dem Fall wohl besser, weil die Funktion ja keinen wert zurückgeben soll
-
Sorex schrieb:
void rechenmiti wär in dem Fall wohl besser, weil die Funktion ja keinen wert zurückgeben soll
Gut beobachtet - das hatte ich von Limatex' Beitrag kopiert und angepasst.
@Caligula: Hab's berichtigt
-
Skym0sh0 schrieb:
der rückgabe typ deiner ersten funktion müsste int[] sein und dann müsstest du return Array; schreiben
Krieg ich dann wirklich das ganze Array, oder nicht vielmehr einen Zeiger auf das lokale Array, dass bei Funktionsende zerstört wird?
-
Belli schrieb:
Krieg ich dann [...] nicht vielmehr einen Zeiger auf das lokale Array, dass bei Funktionsende zerstört wird?
Yupp.
-
Wobei mein Compiler eine Signatur:
int[] funktion()
gar nicht erlaubt.
-
Ist so auch nicht erlaubt.
Was du machen kannst ist folgendes: http://ideone.com/f8jll