Parameter bei Funktionen
-
Hi,
ich lese im Moment das Buch "C++ in 21 Tagen" und dort steht auch:
Die an eine Funktion übergebenen Parameter gelten ebenfalls als lokale Variablen und lassen sich genauso verwenden, als hätte man sie innerhalb des Funktionsrumpfes definiert. Listing 5.2 zeigt ein Beispiel für die Verwendung von Parametern und lokal definierten Variablen innerhalb einer Funktion.Wieso aber funktioniert das hier:
[cpp]#include <cstdlib>
#include <iostream>using namespace std;
void funktion(int*);
int main(int argc, char *argv[])
{
int zahlen[6];
for(int x=0; x<6; x++)
{
zahlen[x]=x;
}
cout << endl;funktion(zahlen);
for(int x=0; x<6; x++)
system("PAUSE");
return 0;
}void funktion(int *arr)
{
for(int x=0; x<6; x++)
arr[x]=9;
}[cpp]Ausgabe:
1. Zahl: 0 2. Zahl: 1 3. Zahl: 2 4. Zahl: 3 5. Zahl: 4 6. Zahl: 5 1. Zahl: 9 2. Zahl: 9 3. Zahl: 9 4. Zahl: 9 5. Zahl: 9 6. Zahl: 9Wieso wird auch der Array "zahlen" verändert?
-
Entschuldigung, hier noch mal mit CPP-Tag
#include <cstdlib> #include <iostream> using namespace std; void funktion(int*); int main(int argc, char *argv[]) { int zahlen[6]; for(int x=0; x<6; x++) { zahlen[x]=x; cout << x+1 << ". Zahl: " << zahlen[x] << endl; } cout << endl; funktion(zahlen); for(int x=0; x<6; x++) cout << x+1 << ". Zahl: " << zahlen[x] << endl; system("PAUSE"); return 0; } void funktion(int *arr) { for(int x=0; x<6; x++) arr[x]=9; }
-
Das ist eine gute Frage.
Wenn du aber mal die Funktionsdeklaration nochmal anschaust, wirst du feststellen, dass du da kein Array per copy überibgst, sondern lediglich einen Zeiger. Sprich auf das erste Element des Arrays. Wenn du jetzt mit dem Zeiger dort arbeitest, dann veränderst du nicht eine lokale Version des Arrays, sondern die aus der main Funktion.
Wenn du eine lokale Version haben willst, kommst du nich drum herum lokal ein Array zu erstellen und mithilfe des Zeigers des anderen Arrays zu kopieren. Stück für Stück.
Oder du nimmst std::vector, dort wird das Array, wenn nötig kopiert.
-
Danke drakon, ist einleuchtend
