mike27 Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 Könnt Ihr mir in ein paar Sätzen folgende Begriffe für C erklären ??? Was sind Zeiger ??? Bei Funktionen werden folgende begriffe erwähnt: Call by Value und Call by references was heißt das oder wie kann man die Begriffe erklären...??? Gruß Mike Zitieren
Woodstock Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 Wenn Du einen Zeiger 'call by value' übergibst, dann übergibst Du nur den Wert. Du kannst den Wert benutzen, aber ihn nicht ändern (zumindest sind Änderungen nicht mehr vorhanden, wenn Du aus der Funktion wieder rausgehst). Übergibst DU einen Zeiger 'call by reference', dann übergibst Du die Adresse des Zeigers mit, und alles was Du mit dem Zeiger anstellst, verändern, löschen etc. wirkt sich auch auf die aufrufende Funtkion aus. Bine Zitieren
mike27 Geschrieben 18. Juli 2002 Autor Geschrieben 18. Juli 2002 Also sind bei Call by references die Änderungen dann wieder im Main vorhanden die in der Funktion geändert wurden ???? Zitieren
Klotzkopp Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 Original geschrieben von mike27 Also sind bei Call by references die Änderungen dann wieder im Main vorhanden die in der Funktion geändert wurden ???? So ist es. Bei Call-by-Value wird eine Kopie der Variablen angelegt, und die aufgerufene Funktion arbeitet mit dieser Kopie. Die Kopie wird gelöscht, nachdem die aufgerufene Funktion beendet ist, daher wirken sich Änderung nicht auf das Original aus. Bei Call-by-Reference wird keine Kopie angelegt, sondern die aufgerufene Funktion kann auf das Original zugreifen. Zitieren
mike27 Geschrieben 18. Juli 2002 Autor Geschrieben 18. Juli 2002 Danke jetzt bin ich schlauer.... Könnt Ihr mir noch ein Beispiel Zeigen, wie man eine Tabelle zb. mit dem Alphabet mit hilfe eines Zeigers füllt (ohne funktionsaufruf)??? Wäre echt suuuuper... Zitieren
maddin Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 sollte kein Problem darstellen. Veruscht einfach einmal folgendes: int main (int argc, char* argv[]) { char tab[26] = {'\0'}; char* p1 = tab[0]; for (int i = (int)'A'; i <= (int)'Z'; i++) { *p1 = (char)i; p1 ++; } p1 = tab[0]; } [/PHP] ich hoffe ich habe da jetzt keinen fehler gemacht. Ein paar kleine Erklärungen vielleicht noch. Als erstes wird eine Array angelegt, welches Platz für 26 Zeichen bietet. Dazu noch einen Zeiger, der mit der Addresse des ersten Elementes des Array initialisiert wird. Danach kommt eine Zählschleife, die alle Zeichen von 'A' bis 'Z' im Alphabet durchgeht. Innerhalb der Schleife wird dem Wert auf den p1 aktuell zeigt, der Wert von i zugewiesen, also das jeweilige Zeichen des Alphabets von 'A' bis 'Z'. Danach wird p1 noch inkrementiert. Dadurch zeigt p1 auf das nächste Element im Array und wandert so die einzelnen Felder des Array ab. Zur Call By Value bzw Call By Reference könnte ich noch auf folgende Addressen verweisen: http://www.luzifers-hp.de/cpp/funktionen.shtml#uebergabe_per_wert http://www.luzifers-hp.de/cpp/funktionen.shtml#uebergabe_per_referenz http://www.luzifers-hp.de/cpp/funktionen.shtml#gefahren_bei_der_rueckgabe_von_referenzen Zitieren
Klotzkopp Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 Original geschrieben von maddin ich hoffe ich habe da jetzt keinen fehler gemacht.Naja, Du initialisierst p1 mit tab[0], tab wäre wohl besser. Außerdem könnte man die Schleife auch gleich mit einem char als Schleifenvariable machen, das ist aber kein Fehler. Der Sinn von p1 = tab[0]; am Ende erschließt sich mir auch nicht wirklich. Zitieren
maddin Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 Original geschrieben von Klotzkopp Naja, Du initialisierst p1 mit tab[0], tab wäre wohl besser. Ist denke ich ein ziemlich größes Streitthema. Von der Funktion her ist beides gleich, den tab ist schließlich auch nichts anderens wie ein Zeiger auf das erste Element des Arrays. Original geschrieben von Klotzkopp Der Sinn von p1 = tab[0]; am Ende erschließt sich mir auch nicht wirklich. Hat den Vorteil, das dann auf ähnliche Art wie die Erste Schleife eine Ausgabe folgen kann, was eigentlich auch sollte aber ich nicht mehr schreiben wollte Zitieren
Klotzkopp Geschrieben 18. Juli 2002 Geschrieben 18. Juli 2002 Original geschrieben von maddin Von der Funktion her ist beides gleich, den tab ist schließlich auch nichts anderens wie ein Zeiger auf das erste Element des Arrays. Aber tab[0] ist das erste Element des Arrays selbst, nicht der Zeiger darauf. tab ist gleichbedeutend mit &tab[0], aber nicht tab[0]. Zitieren
maddin Geschrieben 19. Juli 2002 Geschrieben 19. Juli 2002 Original geschrieben von Klotzkopp Aber tab[0] ist das erste Element des Arrays selbst, nicht der Zeiger darauf. tab ist gleichbedeutend mit &tab[0], aber nicht tab[0]. Ok, ich gebe mich geschlagen. Dann ändern wir die Initialisierung von p1 in 'p1 = tab' oder 'p1 = &tab[0]' um. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.