Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WS12/13 -- Programmierpraktikum C++ | 04: Funktionen, Zeiger, Adressoperator

Jan Wieners
November 05, 2012

WS12/13 -- Programmierpraktikum C++ | 04: Funktionen, Zeiger, Adressoperator

Jan Wieners

November 05, 2012
Tweet

More Decks by Jan Wieners

Other Decks in Education

Transcript

  1. Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // [email protected]

    Programmierpraktikum C++ Wintersemester 2012 / 2013 05. November 2012 – Funktionen, Zeiger, Adressoperator
  2.  Funktionen  Zeiger  Adressoperator  Call by value

    / call by reference Kurzüberblick Wiederholung 02.11.2010
  3. […] int addiereArabisch(int a, int b); int main() { […]

    ergebnis=addiereArabisch( zahl1, zahl2 ); […] } int addiereArabisch(int a, int b) { int resultat; resultat=a+b; a=0; b=0; return resultat; }
  4. […] int addiereArabisch(int a, int b); int main() { […]

    ergebnis=addiereArabisch( zahl1, zahl2 ); […] } int addiereArabisch(int a, int b) { int resultat; resultat=a+b; a=0; b=0; return resultat; } Deklaration: „In meiner Anwendung existiert eine Funktion, die ich zu einem späteren Zeitpunkt definiere“ Deklaration  Funktionskopf, der mit einem Semikolon abgeschlossen wird. Definition: „Auf diese bestimmte Art und Weise verfährt meine Funktion“
  5. #include <iostream> using namespace std; int addition(int operandA, int operandB)

    { return operandA+operandB; } int main() { int zahl1=1; cout<<addition(zahl1,4)<<endl; } #include <iostream> using namespace std; int addition(int,int); int main() { int zahl1=1; cout<<addition(zahl1,4)<<endl; } int addition(int zahl1, int zahl2) { return zahl1+zahl2; } ==? Generieren beide Anwendungen dasselbe Ergebnis?
  6. #include <iostream> using namespace std; int foo1(int, int, int); int

    foo2(void); int main(void) { foo1(1, 2, 3); foo2(1, 2, 3); return 0; } int foo1(int a, int b, int c) { return 0; } inf foo2(void) { return "Hello World!"; } Welche Ausgabe generiert der folgende Quelltext? …und warum?
  7. Bis dato: Variablen  int ganzzahligerWert=13;  char einzelnesZeichen=‘A‘; 

    int[50] eindimensionalesArray;  int[5][5] zweidimensionalesArray; Beispiel:  unsigned int i;  i=1; Interne Repräsentation der Variable i: Zeiger
  8. * „Der Zeigeroperator * löst eine Adressbezugnahme auf, d.h. er

    ermöglicht, auf das Datenobjekt ''indirekt'' zuzugreifen, auf welches der Operand verweist.“ (http://www.tu-chemnitz.de/urz/kurse/unterlagen/C/kap2/ptrop.htm) * * * * * * * * * * * * * * * * *
  9. * „Der Zeigeroperator * löst eine Adressbezugnahme auf, d.h. er

    ermöglicht, auf das Datenobjekt ''indirekt'' zuzugreifen, auf welches der Operand verweist.“ (http://www.tu-chemnitz.de/urz/kurse/unterlagen/C/kap2/ptrop.htm) * * * * * * * * * * * * * * * * *
  10. * Beispiel: int wert = 23; int *zeigerAufWert = NULL;

    zeigerAufWert = &wert; cout << "Vorher: " << endl << wert << endl << zeigerAufWert; *zeigerAufWert = 42; cout << "\nNachher: " << endl << wert << endl << zeigerAufWert;  Zeiger dürfen nur auf Variablen verweisen, die denselben Datentyp haben!
  11. Bringen Sie das folgende Programm zum Laufen, d.h. beseitigen Sie

    Fehler im Programm: #include <iostream> using namespace std; int testFunktion(char *wert); { *wert += 5; cout << "Zahl in Funktion: " << zahl; } int main() { int zahl = 10; cout << "Zahl vor Funktion: " << *zahl; theFunction(zahl); cout << "Zahl nach Funktion: " << zahl; return "ready"; } (P)Fiffige Fehlersuche…
  12. Call by value  Der Compiler fertigt eine Kopie des

    Variableninhalts an: #include <iostream> using namespace std; int function(int wert) { wert += 5; return wert; } int main() { int zahl = 10; cout << zahl; func(zahl); cout << endl << zahl; return 0; } Funktionen: Call by value  Ausgabe?
  13. Call by reference  Compiler fertigt keine Kopie des Variableninhalts

    an; wir arbeiten unmittelbar mit der Variablen: #include <iostream> using namespace std; void func(int *wert) { *wert += 5; } int main() { int zahl = 23; cout << zahl; func(&zahl); cout << zahl; return 0; } Funktionen: Call by reference  Ausgabe?
  14. Schreiben Sie eine Funktion (und das Hauptprogramm dazu), die zwei

    Zahlen vom Datentyp int einliest, die Zahlen vertauscht und an das Programm zurückgibt Übung
  15. /