Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben
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.
Geschrieben

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...

Geschrieben

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

Geschrieben
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.

Geschrieben
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

Geschrieben
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].
Geschrieben
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.

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...