Parameterübergabe noch mal ganz langsam zum mitschreiben



  • Hallo,
    wollte da mal was fragen, da ich im Moment ein Problem hab.
    Ich weiss, wenn ich einen Zeiger hab, wie:

    int *zeiger;
    

    und ihn einer Funktion

    void funktion1( int *i)
    

    übergeben will, dann kann ich diese mit folgendem aufrufen:

    funktion1( *zeiger);
    

    bzw es sollte doch auch bei

    funktion2( int &i)
    

    der Aufruf gehen:

    funktion2( i);
    

    Nun hab ich aber versucht eine Struktur zu erzeugen und von der ein Array zu machen. Dieses will ich jetzt einer Funktion übergeben, wie mach ich das?

    Ich hab da ein einfaches Bsp:

    struct Month{
    	char* name;
    }
    
    void out( Month y[])
    {
    	cout << "\nEin Jahr:\n";
    
    	for( int cnt=0; cnt<12; cnt++)
    	{
    		cout << y[cnt].month << endl;
    	}
    }
    
    void main(int argc, char* argv[])
    {
    ...
    	out( Year[12]);
    ...
    }
    

    ...und das haut natürlich nicht (wäre ja auch zu schön gewesen), also welche Aufrufe und zu welchen Funktionenköpfen kann ich da hernehmen?

    Danke, ich hoffe obiges stimmt, bitte da auch um Berichtigung/Erklärung.
    (da ich momentan dabei bin mich nach längerer Pause wieder einzuarbeiten, steh ich da wieder mal oft total aufm Schlauch) 😞



  • #include <iostream>
    using namespace std;
    
    struct Month{
        char* name;
    };
    
    // Funktion erwartet einen Parameter vom Typ "struct Month" als Array ...
    void out(struct Month year[])
    {
            cout << "\nEin Jahr:\n";
            for( int cnt=0; cnt<12; cnt++)
            {
                    cout << year[cnt].name << endl;
            }
    }
    
    int main()
    {
            // Erstmal eine "Instanz" einer Struktur erstellen ...
            struct Month year[11];   // 0-11 = 12 :)
            // Einzelne Arrays Initialisieren ...
            year[0].name="Januar";
            year[1].name="Februar";
            year[2].name="Maerz";
            //...
            year[11].name="Februar";
            // Übergabe der gesamten Struktur ...
            out(year);
    }
    

    Allerdings fehlt hier noch ne Überprüfung der Monate, denn wenn du z. B. nur die Monate 1-4 übergibst, gibt der trotzdem die Arrays 0-11 aus, und in 5-11 wird nur Murks stehen.

    Überhaupt ist das ganze nicht direkt C++ like, da gibts passendere Konstrukte und Verfahren (vector etc.).



  • Aaaahhh, "struct" muss man den Parameter der Funktion deklarieren!!!
    aber was is denn mit meinen anderen 2 Behauptungen zur Parameterübergabe, sind die richtig???
    Danke auf jeden Fall für die Lösung hier, ich wollte bei meiner Frage das ganze nicht in Grundsätzlichkeiten ausarten lassen, daher hab ich den #include/namespace-pipapo weggelassen. Dass die Sache mit struct und entsprechender Ausgabeschleife etwas zu C-ig ist, für C++, ist mir schon klar, aber das war der erste Teil der Aufgabe. Der zweite ist, wie man das eben am besten in Vectoren oder listen packt, also falls Du mir dasselbe Bsp quasi "in C++" dazu posten könntest wäre ich Dir sehr dankbar! (auch wenn es nicht direkt zum Thema Parameterübergabe passt 🙂 )



  • wendy schrieb:

    Ich weiss, wenn ich einen Zeiger hab, wie:

    int *zeiger;
    

    und ihn einer Funktion

    void funktion1( int *i)
    

    übergeben will, dann kann ich diese mit folgendem aufrufen:

    funktion1( *zeiger);
    

    Das Argument der Funktion ist laut Deklaration ein Zeiger auf int, und zeiger ist ein Zeiger auf int. Also übergibt man auch den Zeiger: funktion1(zeiger).

    funktion2( int &i)
    

    der Aufruf gehen:

    funktion2( i);
    

    Ja, wenn i ein int ist (und ein lvalue).

    Aaaahhh, "struct" muss man den Parameter der Funktion deklarieren!!!

    Nein, muss man nicht, macht man im Normalfall auch nicht. Einfach Month genügt. CarstenJ ist anscheinend im C-Land versunken 😉


Anmelden zum Antworten