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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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