Funktion: Kopie?



  • #include <iostream>
    #include "main.h"
    using namespace std;
    
    void Funktion(int []);
    
    int main()
    {
    	int array[4] = {10,20,30,40};
    
    	for(int i = 0; i < 4; i++)
    	{
    		cout << "Wert von array: " << array[i] << endl;
    	}
    
    	Funktion(array);
    
    	for(int i = 0; i < 4; i++)
    	{
    		cout << "Wert von array: " << array[i] << endl;
    	}
    
    	return 0;
    }
    
    void Funktion(int lok[])
    {
    	for(int i = 0; i < 4; i++)
    	{
    		lok[i] += 33;
    		cout << "Wert von lok: " << lok[i] << endl;
    	}
    }
    

    Wieso ändert die Funktion die Werte aus dem Array array[]? Ich dachte die Funktionen bekämen lediglich Kopien übergeben? Hab das ebend grad noch in einem Buch nachgelesen.



  • Ja, aber ein Array ist immer ein Pointer (auf das erste Ellement)



  • aso, danke, stimmt ja. hatte schon probiert den parameter als const zu übergeben, nur das ich dann werte lokal nicht mehr ändern kann, was ja unter umständen vlt auch mal ganz nützlich wäre.

    Also noch mal verständlich: Wie muß ich es machen wenn ich in einer Funktion mit einer Kopie arbeiten will und diese aber auch verändern will?



  • Am einfachsten dürfte es sein einen Vektor zu nehmen.



  • ok, die werd ich mir mal anschauen.

    Hmm, hab ich aber nicht eigentlich schon einen Vector genommen?



  • ness meint IMHO die Klasse vector aus der STL.

    So könntest du es auch lösen.

    void foo(int* vector, unsigned int size)
    {
         int* copyVector = new int[size];
         for(int i = 0; i < size; ++i)
              copyVector[i] = vector[i];
    
         // ...
         // Hier kannst du nun mit der Kopie (copyVector) arbeiten.
    
         // ...
    }
    

    (Nicht so schöne Variante, aber du verzichtes auf die Klasse vector)

    Caipi



  • an so was ähnliches hatte ich auch schon gedacht. nun, da werde ich es höchstwahrscheinlich auch so machen.

    THX@ALL



  • arrays können nicht übergeben werden.. da man immer die adresse übergibt, ist das automatisch call by reference (für das array).

    für den pointer auf das array is es call by value, diesen kannste nicht ändern. nützt dir aber in dem fall nichts :).


Anmelden zum Antworten