home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disc 53 / Commodore_Disc_53_19xx_-_de.d64 / lektion4 < prev    next >
Text File  |  2022-10-26  |  5KB  |  132 lines

  1. /* Lektion4
  2.  
  3. Konstanten, Variablen, Zugriff und Zeiger
  4.  
  5. Konstanten
  6. ----------
  7. Zahlenwerten koennen Namen gegeben werden, etwa:
  8.  
  9. def screen 1024;
  10.  
  11. Dadurch wird das Gedaechtnis des Compilers weniger belastet als durch Makros.
  12.  
  13. const screen 1024 bsout 0xffd2 ;
  14.  
  15. Der Const-Vereinbarung kann eine ganze Konstantenliste, jeweils aus Name und Wert bestehend, folgen. Dem die Vereinbarung abschliessende Strichpunkt hat mindestens ein Trennzeichen vorauszugehen.
  16.  
  17. Variablen
  18. ---------
  19. Variablen sind nichts anderes als Speicherstellen mit Namen, in die Werte geschrieben oder aus denen Werte gelesen werden. Die Definitionsworte int und char dienen zur Vereinbarung und Platzreservierung. Der letzte Buchstabe des Variablennamens darf keine oeffnende Klammer sein, da dieses als Funktionsvereinbarung angesehen wuerde:
  20.  
  21. int a , b , c ;
  22.  
  23. Durch Kommas laesst sich eine ganze Liste definieren. Eine Int-Anweisung reserviert Raum fuer zwei Bytes, waehrend die Char-Anweisung nur fuer ein Byte (Werte von 0 bis 255) Platz schafft. Es empfiehlt sich Int-Variablen den Vorang zu geben, auch wenn eine Char-Variable genuegen wuerde. So kommt es nicht zu Problemen, wenn Sie die Bytekennung 'by' vergessen sollten.
  24.  
  25. Statische Variablen der eben besprochenen Art werden mit Nullwerten vorbelegt, sofern der Programmierer keine andere Vorbelegung vornimmt. Dieses ist ohne weiteres moeglich:
  26.  
  27. int zeilen 25 , spalten 40 ;
  28.  
  29. Nach dem Compilieren oder Einladen des Programmes sind hier die Variableninhalte schon mit den entsprechenden Werten vorbelegt. Wird das Programm allerdings nach Beendigung erneut aufgerufen, ohne es auch neu zu laden oder zu compilieren koennen sich andere Werte in den Variablen befinden, sofern diese waehrend des vorherigen Programmlaufes geaendert wurden.
  30.  
  31. Eine Variablen kann nicht nur einen einzigen WErt enthalten, sondern eine ganze Liste:
  32.  
  33. char text 'h' 'a' 'l' 'l' 'o' 0 ;
  34.  
  35. Fuer diese Kombination von mehreren Zeichen mit einem abschliessenden Nullbyte existiert eine Abkuerzung:
  36.  
  37. char text "hallo" ;
  38.  
  39. Endlich sind wir soweit, dass Strings kein Problem sind.
  40.  
  41. Eine andere Moeglichkeit Platz zu schaffen, bieten dimensionierte Variablen:
  42.  
  43. char buffer[ 20 ;
  44.  
  45. Die eckige oeffnende Klammer kennzeichnet eine Variable namens buffer, die Platz fuer 20 Bytes bietet. Zu beachten ist, dass dimensionierte Variablen nicht vorbelegt werden koennen. Sie werden nicht mitten im Programm angelegt, sondern erst hinter dem Programm.
  46.  
  47. char text1 'a' , text2[ 10 , text3 'b' , text4[ 5 ;
  48.  
  49. Die Variablen text1 und text3 liegen mitten im Programm unmittelbar hintereinander, waehrend text2 und text4 nach dem Programm hintereinander angeordnet sind.
  50.  
  51. Variablen und Zugriff
  52. ---------------------
  53.  
  54. In BASIC bedeuten Variablennamen etwas unterschiedlliches, je nachdem, ob sie sich links oder rechts des Zuweisungsopersators befinden:
  55.  
  56. a=b
  57.  
  58. Links davon ist der Platz der Variablen gemeint, rechts davon deren Inhalt. In CP steht der Variablenname immer fuer die Adresse der Variablen. Deren Inhalt muss erst durch einen Peek-Befehl, der in CP mit einer sich schliessenden eckigen Klammer ausgedrueckt wird, gelesen werden:
  59.  
  60. b ] a =
  61.  
  62. Dieses ist die Entsprechung zum BASIC-Beispiel.
  63.  
  64. Im nachfolgenden Beispiel wird nicht ein String an die Variable b uebergeben, sondern nur die Adresse von a$. B enthaelt nicht a$ sondern ist Zeiger auf a$.
  65.  
  66. char a$ "String" ;
  67. int b ;
  68. main()
  69. begin
  70.  a$ b =
  71. bend
  72.  
  73. Nach dieser Zuweisung kann mit Hilfe von b auch auf a$ zugegriffen werden:
  74.  
  75. b        Adresse von b
  76. b ]      Inhalt von b ( Adresse von a$)
  77. b ] by ] Inhalt von a$ (erstes Zeichen S)
  78.  
  79. Auch beim Lesen gibt es wieder die Kennung 'by' fuer Bytezugriff.
  80.  
  81. Zeigerbefehle
  82. -------------
  83.  
  84. Zeiger sind ein wichtiges Element in CP-Code. Spezielle Zeigerbefehle erleichtern die Handhabung. Alle nachfolgenden Befehle gibt es fuer wort- und byteweisen Zugriff.
  85.  
  86. ]] Abkuerzung fuer ] ]
  87.  
  88. by ]] Abkuerzung fuer ] by ]
  89.  
  90. ]++ Variableninhalt wird gelesen, Variableninhalt anschliessend erhoeht.
  91.  
  92. ++] Variableninhalt wird erhoeht, der bereits erhoehte Inhalt gelesen.
  93.  
  94. ]-- Variableninhalt wird gelesen, Variableninhalt anschliessend erniedrigt.
  95.  
  96. --] Variableninhalt wird erniedrigt, der bereits erniedrigte Inhalt gelesen.
  97.  
  98.  
  99. Platz fuer Definitionen
  100. ----------------------
  101.  
  102. Makros, Konstanten und Variablen koennen innerhalb einer Funktion definiert werden oder ausserhalb. Definitionen ausserhalb sind global. Alle folgenden Funktionen koennen von diesen Vereinbarungen Gebrauch machen. Definitionen innerhalb einer Funktion sind lokal und gelten nur fuer die betreffende Funktion. Lokale Konstanten und Makros sollten zur besseren Uebersicht zwischen der Funktionsvereinbarung und begin definiert werden. Fuer statische Variablen ist dies zwingend notwendig. Zu dynamischen Variablen kommen wir spaeter noch.
  103.  
  104.  
  105. globaler Bereich
  106.  
  107. main()
  108.   lokaler Bereich
  109. begin
  110. bend
  111.  
  112. Sonderbehandlung fuer Strings
  113. Strings kommen haeufig vor, sodass hier eine Sonderbehandlung eingefuehrt wurde. Ein String, der mit doppelten Anfuehrungszeichen darstellbar ist, braucht nicht extra als Variable definiert werden, um seine Anfangsadresse zu bekommen. Stattdessen ist auch moeglich "string" zg =, wie im folgenden Beispiel:
  114. */
  115.  
  116.  
  117. void putc( )
  118. begin
  119.   ac by = 0xffd2 sys
  120. bend
  121.  
  122. main()
  123. int zg ;
  124. def . zg ]++ by ] putc;
  125. begin
  126.   "/147String" zg =
  127.   . . . . . . .
  128. bend
  129.  
  130.  
  131. /* Durch das Punktmakro werden die sieben Zeichen des Strings mit Hilfe des Zeigers zg und der Funktion putc ausgegeben. Weiter mit lektion5 */
  132.