Pointer in der Parameterübergabe



  • Ich habe folgende Prozedur, diese kopiert einen Array in einen anderen. Meine Aufgabe ist es die Parameterübergabe in die Schreibweise für Pointer zu ändern. Meine Frage ist nun, ob dies nicht schon der Fall ist, da es ja eine void Prozedur ist? Muss der Indirektionsoperator bei den Array weggelassen werden, da die Arrays schon Adressen sind? Bin da etwas verwirrt.

    void copy(char x[], char y[])
    {
        int k=0;
        while(x[k] != '\0')
        {
            y[k] = x[k];
            k++;
        }
        y[k] = '\0';      
    }
    

    So rufe ich das ganze im Hauptprogramm dann auf:

    copy(name, cname);
    

    Dann kann ich mit dem Array cname auch schon weiterarbeiten.



  • Ist das die komplette Aufgabe oder fehlt vielleicht noch was? 😉

    Nach der Beschreibung der Aufgabe wäre die einzige Änderung die ich machen würde

    void copy(char *x, char *y)
    

    und dann geht das eigentlich.



  • Der restliche Teil ist eigentlich nicht so wichtig. Funktionieren tut es auch so wie es ist. Aber ist die Schreibweise für Pointer auch korrekt?

    Vorher deklariere ich die Variablen:

    char name[15];
        char cname[15];
    

    Es soll ein Array vom Typ char in einen anderen Array kopiert werden. Wozu brauch man beim ersten Parameter ein Indirektionsoperator? Muss man diesen dann nicht auch in der Prozedur selber bei den Variablen setzen?



  • Thorin schrieb:

    Wozu brauch man beim ersten Parameter ein Indirektionsoperator? Muss man diesen dann nicht auch in der Prozedur selber bei den Variablen setzen?

    Anstatt x[2] kannst du auch *(x+2) schreiben.
    Bei Zeigern auf eine Struktur gibts auch so was:
    (*strukturzeiger).element <=> strukturzeiger->element



  • Bei der Deklaration einer Variablen ist * kein Indirektionsoperator, sondern eine Erweiterung des Typs zu "pointer of"...

    char a; // Ein Zeichen
    char b[20]; // Ein Feld von 20 Zeichen
    char *c; // Ein Zeiger auf ein Feld von 0-n Zeichen
    
    c = b; // c 'zeigt' jetzt auf Feld b
    

    Man muss dazusagen dass die Verwendung von b sich verhält als wäre b ein "Zeiger auf Feld", nur dass man diesen Zeiger nicht ändern kann.


Anmelden zum Antworten