Zum Inhalt springen

Bitte Erklärung für folgende Begriffe !!!


mike27

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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].
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...