Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

Also sind bei Call by references die Änderungen dann wieder im Main vorhanden die in der Funktion geändert wurden ????

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.

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

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

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.

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

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].
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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.