home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / ASCII / TEXTE / SCENE / FAQ-LISTS / cfaq_7.txt < prev    next >
Encoding:
Text File  |  1995-01-03  |  23.8 KB  |  522 lines

  1. _______________          _____      _____   _________       ___________________
  2. \.            /________ |.   /_____:o    | /.        \/|___/_       \         /
  3.  \___   _____/|.   /   \||  /|.    |:    |//   ______/·|.   / ______ \    ___/
  4.    /.   /_/·  ||  /     \:  \||    |·    |/   /   \ \/ ||  /_______ \/+    /
  5.   //  ____/   ||  \   \  \   \:   ¯¯¯    |   /    / /  ||  \ /·\  /  \  __/_
  6.  //   / //    |+   \   \      \  \___/   |   \___/ /   |·   \/  \/   /      /
  7. /·   /  \\         /    \     /    |:    |        /         /       /      /
  8. \___/    \________/_____|\___/:    |_____|_______/\________/_______/______/
  9.                              l_____|·MBB·
  10.  
  11.  
  12. _ ___                  \ _
  13.   ___|__________/\______\//\________________________________________________ _
  14.   \___   /  ___/  \_____\//\______________      /\   ______/  _______/  ___ _
  15.      | _/   \ _    \_   \/     |   ___)_/_  ___/_/_  ___)_\______   \______
  16.      | \     \/     /   ||     |   \      | \      | \          /    /    /
  17.  _ __|  \__________/____||     |____      |__      |__         _____/    ___ _
  18.      `----'              `-----'   `------' `------' `---------'  `------'
  19.                                                                          
  20.                               [hOMELESS÷bBS!]
  21.  
  22.     [bIRDHOUSE^pROJECTS eUROPEAN hQ][mYTH! gERMAN hQ][aRT-cORE! fUN hQ]
  23.  
  24.             [sYSdOODE: -sLIME!^bIRDHOUSE÷pROJECTS-lEADER^mYTH!]
  25.                [cOdOODES: mOGUe!/sCX^aC! pRIMUS!/bP!-lEADER]
  26.                      [MR.VAiN/bNZ^aC! wHIRLWIND/mYTH!]
  27.  
  28.             [uPLOADER:GeNeRaTioN      ][oF:[+] PRODIGY '95 [+]]
  29.                [uPLOAD tIME:13:54:00][uPLOAD dATE:03-Jan-95]
  30.  
  31. _ ___                  \ _
  32.   ___|__________/\______\//\________________________________________________ _
  33.   \___   /  ___/  \_____\//\______________      /\   ______/  _______/  ___ _
  34.      | _/   \ _    \_   \/     |   ___)_/_  ___/_/_  ___)_\______   \______
  35.      | \     \/     /   ||     |   \      | \      | \          /    /    /
  36.  _ __|  \__________/____||     |____      |__      |__         _____/    ___ _
  37.      `----'              `-----'   `------' `------' `---------'  `------'
  38.  
  39.  
  40.  
  41.  
  42.   «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
  43.         .         .        .            .    :   ·    .
  44.    ____/¦__   ___/¦____ __/¦___________/¦__  ¦   ¦___/¦__         !
  45.    _ ____  \__\____  _//  _____\_________  \ |   | ____  \__     _:/\__
  46.     /·  |____//·  |   \\_____ ·\|   |   |  \\|   |/·  |____/     \ Oo /
  47.    //   |    \    |    \   l   \\   |   |   ·\_  //   |    \     /_--_\
  48.    \__________\________/________/___j___j     /  \__________\     :\/
  49.    -------------------------------------l____/   :-----------     ¡
  50.                                              ·   ·
  51.                     .     :   ·    .           .         .        .
  52.     !        _ ____/¦__   ¦   ¦____¦\____ ____/¦__   ___/¦____ __/¦_____ __
  53.    _:/\__    _ _ ____  \__|   |______   \ _ ____  \__\_  |  _//  _____ __ _
  54.    \ Oo /       /·  |____/|   |/· __  __/  /·  |____//·  |   \\_____ ·\
  55.    /_--_\      //   |    \|   //   |    \_//   |    \    l    \   l   \\
  56.     :\/        \__________\   \____j     /\__________\________/________/
  57.     ¡          -----------·   :----l____/-------------------------------
  58.                           ·   ·
  59.      <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
  60.  
  61.               Upload Date: [01-03-95] «» Upload Time: [07:18:30]
  62.  
  63.   «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
  64.  
  65.                     .__ _                                            r      
  66.                     :   __tHIS fILE wAS D/L fROM                     I      
  67.                  _ _02-Jan-95_________________________:              N      
  68.                    _|   \/                            |              G      
  69.                    \/       T¾R¾S¾I LEADER H¾Q     \\ ²  tRISTAR & rED      
  70.                     ­                               \ ­          sECTOR     
  71.     ö   .           |_/\________/\__.___   _/\_______ |              W      
  72.      /\             |\    ._    \   ­   \  \     ____)²             iNC.    
  73.    . \/\------------|/    |/____/        \ /     __)__!---------------.     
  74.      |\/            /     ²   /     |     \           \   4nODEZ      |     
  75.      |              \_____|   \_____²_____/___________/               !_    
  76.      |ö             |                                 |              /_/\   
  77.      |  _/\__.___   !/\_._/\________/\________/\______!  _/\______   \_\/   
  78.      |  \    ­   \  \___!\    ._    \   ._    \    ____) \    .   \   |     
  79.      00:13:52     \ /   |/    |/    /   |/    /    __)__ /    |    \_/¹     
  80.        /     |     \    |     /    /    /    /          \     |     \       
  81.        \_____²_____/____²_________/_________/___________/_____²_____/ö2Fö   
  82.                     ²                                 ²                     
  83.                    _!/\__                             |__                   
  84.                    \ Oo /   +49  p¾R¾I¾V¾A¾T¾E¾!   ___| /                   
  85.    eLITE gUYS      /_--_\                          \  //                    
  86.     wILL gET        ²\/      tHE hOLY mASTER iS     \/|                     
  87.   iNVITED hERE      !              mClOUD             ²                     
  88.                     ²  aND hIS hELPING hAND iS mARIO  :                     
  89.                     :                                                       
  90.                     ¾   aSK fOR nUMBER aND sYSPW/nUP
  91.  
  92.  
  93. @BEGIN_FILE_ID.DIZFREQUENTLY ASKED QUESTIONS ABOUT `C`
  94. -German Edition-
  95. 7-10
  96. @END_FILE_ID.DIZ
  97. /Teil 7/
  98.  
  99.                                      Kapitel 6
  100.  
  101.                                  Arrays & Pointer
  102.  
  103.  
  104.           6.1  Pointer
  105.  
  106.  
  107.           Q6.1.1  Wie verstehe ich Pointer? Sind Pointer Adressen?
  108.  
  109.  
  110.           Praktisch gesehen ja. Praktisch gesehen ist ein  Pointer nichts
  111.           anderes als eine Variable,  die  eine  Adresse, d.h. die Nummer
  112.           einer  Speicherzelle im  Hauptspeicher  des  Rechners  enthält.
  113.           Stellen  wir  uns  vor, wir haben einen Rechner mit 8 MB Haupt-
  114.           speicher. Der Hauptspeicher besteht also aus ca. acht Millionen
  115.           Speicherzellen, die jeweils ein  Byte  enthalten  können. Diese
  116.           Speicherzellen kann man von  0  an  durchnumerieren,  dann läßt
  117.           sich für alles,  was  im  Speicher  steht,  feststellen, welche
  118.           Nummer die Speicherzelle hat, wo es steht (bzw. wo es anfängt).
  119.           Wenn z.B. nach der Definition
  120.  
  121.                char z = 'A';
  122.  
  123.           das 'A' in der Speicherzelle Nr. 1234 steht, dann sagt man, die
  124.           Variable z habe die Adresse 1234.
  125.  
  126.           Um die Adresse  eines  Objekts  zu  ermitteln, gibt es in C den
  127.           Adreß-Operator "&". In diesem Fall würde
  128.  
  129.                &z
  130.  
  131.           die Adresse von z, also 1234 liefern.
  132.  
  133.           Man könnte auf die Idee  kommen, diese Adresse in einer anderen
  134.           Variablen zu speichern, zum Beispiel:
  135.  
  136.                int adr = &z;
  137.  
  138.           Und damit fangen die Probleme an: Wer sagt, daß  in  einem  int
  139.           Platz genug für die Adresse ist? Wenn ein int nur  16 Bits groß
  140.           ist, also keine Werte über  32767 speichern kann, dann kann man
  141.           die Adressen von Objekten,  die  jenseits  der ersten 32 KB des
  142.           Speichers liegen, nicht in einem  int  ablegen.  Also versuchen
  143.           wir es mit:
  144.  
  145.                long adr = &z;
  146.  
  147.           oder
  148.  
  149.                unsigned long adr = &z;
  150.           40                       Arrays & Pointer
  151.           ---------------------------------------------------------------
  152.  
  153.           Aber das bringt nichts, denn  auch  unsigned  long  braucht nur
  154.           32 Bits groß zu sein,  was  nur  für  Adressen bis 4 GB reicht.
  155.           (Das erscheint uns heute als  eine ganze Menge. Vor zehn Jahren
  156.           erschien  uns  auch  ein Megabyte als eine  ganze  Menge.)  Das
  157.           heißt:  auf  diese  Weise kommen wir nicht weiter, wenn wir mit
  158.           Adressen  arbeiten  wollen.  Aus diesem Grund gibt es in C spe-
  159.           zielle Datentypen, um Adressen von Objekten zu speichern. Diese
  160.           Datentypen  nennt  man "Pointer" oder  "Zeiger".  Um  möglichst
  161.           flexibel  zu  sein,  definiert  C  zu   jedem   Datentyp  einen
  162.           Zeigertyp, der Adressen von Objekten dieses  Typs  halten kann.
  163.           Adressen von chars werden also  in  "Zeigern  auf  char" (char-
  164.           Pointern),  Adressen  von  ints  in  "Zeigern  auf  int"  (int-
  165.           Pointern) usw. abgelegt. Natürlich stellen  diese Pointer-Typen
  166.           wiederum Typen dar, so daß es auch auf sie  Pointer  gibt.  Die
  167.           Adresse einer Variablen vom  Typ  "char-Pointer"  kann  also in
  168.           einer Variablen vom Typ "char-Pointer-Pointer"  abgelegt werden
  169.           usw. Das  geht beliebig weit, obwohl mehr als dreifache Pointer
  170.           in der Praxis so gut wie nie vorkommen (und durchaus verhinder-
  171.           bar sind).
  172.  
  173.           Pointer werden durch einen "*" kenntlich gemacht, also:
  174.  
  175.                char z = 'A';           /* ein char */
  176.                char *p = &z;           /* ein Pointer auf z */
  177.                char **pp = &p;         /* ein Pointer auf p */
  178.  
  179.           Man kann sich einen  Pointer  also  einfach vorstellen als eine
  180.           Variable, die die Adresse eines anderen Objekts speichern kann.
  181.           Auf vielen  Systemen sind Pointer daher identisch mit ints oder
  182.           longs, d.h. wenn bei
  183.  
  184.                char z = 'A';
  185.  
  186.           das 'A' an Adresse 1234 liegt, dann haben die beiden Variablen
  187.  
  188.                int i = 1234;
  189.                char *p = &z;
  190.  
  191.           dieselbe  interne  Darstellung (d.h. sie  belegen  gleich  viel
  192.           Platz im Speicher und stimmen bitweise überein). Allerdings ist
  193.           eine derartig einfache Organisation  nicht  auf  allen Rechnern
  194.           möglich:
  195.  
  196.               -  Es gibt  Rechner, auf denen Pointer länger sind als ints
  197.                  oder longs.
  198.  
  199.               -  Es  gibt  Rechner, auf denen  Pointer  auf  verschiedene
  200.                  Typen verschieden viel Platz brauchen.
  201.  
  202.               -  Es gibt Rechner, deren Speicher nicht-linear organisiert
  203.                  ist.
  204.  
  205.           Mit anderen  Worten, wie ein Pointer intern aussieht, läßt sich
  206.           nicht  von vornherein festlegen, weil es  in  großem  Maße  vom
  207.           verwendeten Prozessor und dem Betriebssystem  abhängt. Deswegen
  208.           sind Pointer in  C  von dem ursprünglichen Konzept der Adressen
  209.           abstrahiert.  Pointer stellen einen "abstrakten Datentyp"  dar,
  210.           mit dem man arbeiten kann, ohne sich über  die  interne Organi-
  211.                                  Arrays & Pointer                      41
  212.           ---------------------------------------------------------------
  213.  
  214.           sation bewußt sein zu müssen. Dieser  abstrakte  Datentyp defi-
  215.           niert auch die Regeln der Pointer-Arithmetik, z.B.
  216.  
  217.                int a[2];       /* ein Array von zwei ints */
  218.                int *p = &a[0]; /* ein Zeiger auf a[0] */
  219.                p++;            /* jetzt zeigt p auf a[1] */
  220.  
  221.           Die Pointer-Arithmetik hat ihren Ursprung natürlich in dem ein-
  222.           fachen, linearen  Speichermodell,  funktioniert  aber  auch auf
  223.           Rechnern, deren Speicher anders  organisiert  ist.  Das sicher-
  224.           zustellen  ist Sache des jeweiligen Compilerautors, der  C-Pro-
  225.           grammierer braucht sich nicht darum zu kümmern.
  226.  
  227.           Anfänger in C tun gut daran, sich Pointer wie oben beschrieben,
  228.           also  als Variablen, die Adressen speichern, vorzustellen.  Auf
  229.           diese  Weise  versteht  man  am  ehesten, was es  mit  Pointer-
  230.           arithmetik auf sich hat oder  wie Dinge wie Pointer auf Pointer
  231.           funktionieren. Man sollte aber  nicht  vergessen,  daß  es sich
  232.           dabei nur um eine Vorstellung handelt, von der man sich irgend-
  233.           wann trennen muß.                                          (wr)
  234.  
  235.  
  236.           Q6.1.2  Kann ich einen Pointer auf eine Funktion in einen
  237.                   Pointer auf Daten wandeln?
  238.  
  239.  
  240.           Versuchen kann man es zwar,  allerdings  ist  nicht garantiert,
  241.           daß es funktioniert. Daher sollte man es lassen.
  242.  
  243.           Pointer auf Funktionen  und  Pointer  auf  Daten  dürfen - ent-
  244.           sprechend dem ANSI-Standard - intern unterschiedlich  aufgebaut
  245.           sein. Auf einigen Systemen  geht  das  sogar nicht anders, z.B.
  246.           wenn Funktionen in einem nur-lesbaren Datenbereich ("sharable")
  247.           und  Daten   in   einem   schreib-/lesbaren   Bereich  abgelegt
  248.           werden.                                                    (tw)
  249.  
  250.  
  251.           6.2  Null-Pointer
  252.  
  253.  
  254.           Null-Pointer-Diskussionen  treten  in  der    Netzgruppe  schon
  255.           nahezu  deterministischer  auf.  Auf  einer  Rangliste  der  am
  256.           häufigsten gestellten Fragen dürften sich  entsprechende Fragen
  257.           über Null-Pointer  ganz  weit  oben  befinden.  Würde  man eine
  258.           Rangliste der falschen Antworten  führen,  so  findet  sich mit
  259.           Sicherheit jeglicher Dummfug über Null-Pointer  uneinholbar auf
  260.           dem ersten Platz  ("Hätte  er geschwiegen wäre er ein Philosoph
  261.           geblieben.").
  262.  
  263.           Warum ist das so? Ehrlich gesagt, ich weiß es nicht so richtig.
  264.           Null-Pointer sind weder kompliziert zu verwenden, noch sind sie
  265.           umständlich  definiert  oder  legen  ein   irgendwie  geartetes
  266.           merkwürdiges  Verhalten an  den  Tag.  Sie  sind  lediglich von
  267.           einem Wust von "Programmierer-Aberglaube" verkleistert, von dem
  268.           ich gerne mal wissen würde, wie er zustande kommt. Insofern ist
  269.           es zwar verständlich, wenn  auch  unsinnig,  daß  die folgenden
  270.           Aussagen  zu  Null-Pointern von Leser  in  vorherigen  Ausgaben
  271.           dieser FAQ heftigst bestritten wurden.
  272.           42                       Arrays & Pointer
  273.           ---------------------------------------------------------------
  274.  
  275.           Nichtsdestotrotz,  im  folgenden finden sich  die  Fakten  über
  276.           Null-Pointer. Sie sind samt und sonders durch den ANSI-Standard
  277.           ([Ratio], [Schi 93]) belegbar.                             (tw)
  278.  
  279.  
  280.           Q6.2.1  Ist 0 der Null-Pointer?
  281.  
  282.  
  283.           Nein, das ist 0 nicht. Unter bestimmten Umständen wird 0 jedoch
  284.           zu einer sog. "Null-Pointer-Konstanten".
  285.  
  286.           Jeder konstante, integrale Ausdruck  mit  dem  Wert  Null (also
  287.           auch 0) in einem Pointer-Kontext  (d.h. an einer Stelle, wo ein
  288.           Pointer  stehen  soll/muß)  ist so eine Null-Pointer-Konstante.
  289.           Ebenso wird ein solcher Ausdruck, der zusätzlich  noch explizit
  290.           auf   (void *)   gecasted   wird,  eine  Null-Pointer-Konstante
  291.           genannt.  Es  gibt  also  nicht  "die"  Null-Pointer-Konstante.
  292.           Sprich
  293.  
  294.                (void *)0
  295.                (void *)(1 - 1)
  296.  
  297.           und auch z.B. ein
  298.  
  299.                (7 - 3 - 4)
  300.  
  301.           an der richtigen Stelle sind allesamt Null-Pointer-Konstanten.
  302.  
  303.           Wenn eine solche Konstante einem  Pointer  zugewiesen  oder auf
  304.           Gleichheit mit einem  Pointer  getestet  wird,  wird  die Null-
  305.           Pointer-Konstante in einen  Pointer auf diesen Typ konvertiert.
  306.           Das Ergebnis der Konvertierung der Konstante (ein Pointer) wird
  307.           Null-Pointer genannt. Beispiel:
  308.  
  309.                char *c;
  310.                int  *i;
  311.  
  312.                c = 0;    /* 'c' wird der Null-Pointer zugewiesen */
  313.                i = (void *) (10 - (8 + 2));  /* i auch           */
  314.  
  315.           Welchen   "Wert"   besitzt   ein   Null-Pointer?   Dazu   Frage
  316.           Q6.2.3.                                                    (tw)
  317.  
  318.  
  319.           Q6.2.2  Ist NULL der Null-Pointer?
  320.  
  321.  
  322.           Nein,  NULL  ist  ein  Makro,  das in <stddef.h> (ANSI C)  bzw.
  323.           <stdio.h> (K&R C) definiert ist. Der ANSI-Standard  fordert für
  324.           NULL  nur,  daß   das  Makro  zu  einer  Null-Pointer-Konstante
  325.           expandiert.  Damit  sind  - entsprechend Q6.2.1 - unter anderem
  326.           folgende  Definitionen  (und   noch  viele  weitere)  für  NULL
  327.           zulässig:
  328.  
  329.                #define NULL (void *)0
  330.                #define NULL 0
  331.                #define NULL (void *)(1 - 1) /* umstaendlich, zulaessig */
  332.                                  Arrays & Pointer                      43
  333.           ---------------------------------------------------------------
  334.  
  335.           oder z.B. auch
  336.  
  337.                #define NULL (7 - 3 - 4)     /* umstaendlich, zulaessig */
  338.  
  339.           Die gelegentlich geäußerten Behauptungen, daß NULL
  340.  
  341.               -  der Null-Pointer sei,
  342.  
  343.               -  nur an Pointer auf Daten und
  344.  
  345.               -  nicht an Pointer auf Funktionen zugewiesen werden darf,
  346.  
  347.               -  unbedingt als 0 oder
  348.  
  349.               -  unbedingt als (void*)0 definiert sein muß, usw.
  350.  
  351.           sind  samt  und  sonders  falsch,  purer  Aberglaube  und durch
  352.           absolut nichts im ANSI-Standard oder im K&R belegbar.      (tw)
  353.  
  354.  
  355.           Q6.2.3  Ist ein Null-Pointer ein Pointer mit allen Bits auf 0?
  356.  
  357.  
  358.           Nein,   auch  das  ist  alter,  aber  falscher   Programmierer-
  359.           Aberglaube! Ein Null-Pointer kann zwar  ein  Pointer  mit allen
  360.           Bits auf 0 sein (ist es häufig auch), muß es aber nicht.
  361.  
  362.           Für einen Null-Pointer wird nur gefordert, daß  jeder Vergleich
  363.           von ihm mit jedem  anderen  Pointer  auf  ein Objekt (z.B. eine
  364.           Variable)  oder  auf  eine  Funktion  das  Ergebnis  'ungleich'
  365.           liefert. Nur  ein Vergleich von zwei Null-Pointern darf und muß
  366.           'gleich' ergeben.
  367.  
  368.           Beispielsweise  könnte  ein  Null-Pointer  auch ein Pointer mit
  369.           allen Bits auf 1 sein, wenn nur sichergestellt ist, daß  es nie
  370.           einen Pointer auf ein Objekt oder eine Funktion geben kann, bei
  371.           dem auch alle Bits 1 sind.
  372.  
  373.           Übrigens, das ist keine  blanke  Theorie,  es gibt Systeme, bei
  374.           denen ein Null-Pointer nicht aus lauter Null-Bits besteht, z.B.
  375.           weil  sich  dort  ein  Pointer  aus  Segmentnummer  und  Offset
  376.           zusammensetzt und die Segmentnummer  des  Prozesses  nicht null
  377.           ist.                                                       (tw)
  378.  
  379.  
  380.           6.3  Diverses
  381.  
  382.  
  383.           Q6.3.1  Ist "char *[]" das gleiche wie "char **"?
  384.  
  385.  
  386.           Im Normalfall nicht. char *[] bezeichnet ein Array von Pointern
  387.           auf char und char ** bezeichnet einen Pointer auf einen Pointer
  388.           vom Typ char. Beides ist deutlich etwas Unterschiedliches.
  389.  
  390.           Nun wird unter bestimmten  Umständen  der  Name eines Arrays in
  391.           einen Pointer auf das  erste  Element  das Arrays gewandelt. So
  392.           z.B. bei Funktionsdefinitionen. Daher entspricht
  393.           44                       Arrays & Pointer
  394.           ---------------------------------------------------------------
  395.  
  396.                void funk(char *array[]) { /* ... */ }
  397.  
  398.           einem
  399.  
  400.                void funk(char **array) { /* ... */ }
  401.  
  402.           Dies gilt aber nur dort. Andere Operationen sind  nur  in einer
  403.           Richtung möglich:
  404.  
  405.                char **p;
  406.                char *a[10];
  407.  
  408.                p = a;    /* legal, entspricht 'p = &a[0];' */
  409.                a = p;    /* illegal! a ist kein l-value    */
  410.  
  411.                                                                      (tw)
  412.  
  413.  
  414.           Q6.3.2  Wie initialisiere ich ein mehrdimensionales Array?
  415.  
  416.  
  417.           Im Prinzip nicht anders, als  ein  eindimensionales  Array, mit
  418.           einer  Initialisierungsliste.  Verwirrend  ist häufig  nur  die
  419.           Reihenfolge der Dimensionen/Elemente.  Zu beachten ist, daß die
  420.           letzte  angegebene  Dimension  am  schnellsten   variiert.  Ein
  421.           Beispiel soll dies zeigen:
  422.  
  423.                #define X (2)
  424.                #define Y (3)
  425.                #define Z (4)
  426.  
  427.                int a[Z][Y][X] = {
  428.                /*             y = 0         y = 1         y = 2        */
  429.                /* z=0 */ {{ 000, 001 }, { 010, 011 }, { 020, 021}},
  430.                /* z=1 */ {{ 100, 101 }, { 110, 111 }, { 120, 121}},
  431.                /* z=2 */ {{ 200, 201 }, { 210, 011 }, { 220, 221}},
  432.                /* z=3 */ {{ 300, 301 }, { 310, 311 }, { 320, 321}}
  433.                /*             ^    ^        ^    ^        ^    ^       */
  434.                /*             |    |________|____|________|____| x = 1 */
  435.                /*             |             |             |            */
  436.                /*             |_____________|_____________|_____ x = 0 */
  437.                };
  438.  
  439.           X ist  hier die letzte Dimension, variiert also am schnellsten.
  440.           Es bietet sich immer an, als letzte Dimension diejenige mit der
  441.           geringsten Wertigkeit - aus Sicht der Applikation - anzugeben.
  442.  
  443.           Die einzelnen Dimensionen im obigen  Beispiel  wurden  mit '{',
  444.           '}'   geklammert   um   die  Übersichtlichkeit  zu  verbessern.
  445.           Natürlich ist auch
  446.  
  447.                int b[Z][Y][X] = {
  448.                     000, 001, 010, 011, 020, 021,
  449.                     100, 101, 110, 111, 120, 121,
  450.                     200, 201, 210, 011, 220, 221,
  451.                     300, 301, 310, 311, 320, 321
  452.                };
  453.  
  454.           zulässig.                                                  (tw)
  455.           46                       Arrays & Pointer
  456.           ---------------------------------------------------------------
  457.  
  458. /Ende von Teil 7/
  459.  
  460. Keep hacking
  461. Wolfram
  462.  
  463.  
  464.  
  465.  
  466.   «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
  467.         .         .        .            .    :   ·    .
  468.    ____/¦__   ___/¦____ __/¦___________/¦__  ¦   ¦___/¦__         !
  469.    _ ____  \__\____  _//  _____\_________  \ |   | ____  \__     _:/\__
  470.     /·  |____//·  |   \\_____ ·\|   |   |  \\|   |/·  |____/     \ Oo /
  471.    //   |    \    |    \   l   \\   |   |   ·\_  //   |    \     /_--_\
  472.    \__________\________/________/___j___j     /  \__________\     :\/
  473.    -------------------------------------l____/   :-----------     ¡
  474.                                              ·   ·
  475.                     .     :   ·    .           .         .        .
  476.     !        _ ____/¦__   ¦   ¦____¦\____ ____/¦__   ___/¦____ __/¦_____ __
  477.    _:/\__    _ _ ____  \__|   |______   \ _ ____  \__\_  |  _//  _____ __ _
  478.    \ Oo /       /·  |____/|   |/· __  __/  /·  |____//·  |   \\_____ ·\
  479.    /_--_\      //   |    \|   //   |    \_//   |    \    l    \   l   \\
  480.     :\/        \__________\   \____j     /\__________\________/________/
  481.     ¡          -----------·   :----l____/-------------------------------
  482.                           ·   ·
  483.      <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
  484.  
  485.               Upload Date: [01-03-95] «» Upload Time: [07:18:30]
  486.  
  487.   «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
  488.  
  489.                                                           [-AquaAdder v1.0-]
  490.  
  491.  
  492.  
  493.  
  494.  
  495.    
  496.                             -sLiME!^bP·LEADER^mTH!
  497.                          mOGUe!^aC! pRIMUS!/bP·lEADER
  498.                       wHIRLWIND/mTH! MR.VAIN/BNZ^sXi^aC!
  499.  
  500. -- --- ---- pHUKKIN' fAST aMIGA ^ wORLD'S lARGEST cHIPTUNE aREA ---- --- --
  501.       ____
  502.   ___|    |_____________  __________________   ____________________________
  503. _/  _|    |   ._________\/__________  \   _/___\______  \   _____/   _____/
  504. \   \.    |   l/    /   \/    |  _____/_  l     /  _____/\____  _/\____  \_
  505.  \___|    |________/____||-Mo!|________________/_______\ _______\ ________/
  506.      l____|              l____|                         \/       \/
  507.  
  508.     -- --- ---- aMI-eX fREE-lEECH ^ bIG aSCII bASE © bY aC! ---- --- --
  509.  
  510.    -- mYTH! gHQ - -÷- - bIRDHOUSE pROJECTS! eHQ - -÷- - aRT-cORE! eHQ --
  511.  
  512. _______________          _____      _____   _________       ___________________
  513. \.            /________ |.   /_____:o    | /.        \/|___/_       \         /
  514.  \___   _____/|.   /   \||  /|.    |:    |//   ______/·|.   / ______ \    ___/
  515.    /.   /_/·  ||  /     \:  \||    |·    |/   /   \ \/ ||  /_______ \/+    /
  516.   //  ____/   ||  \   \  \   \:   ¯¯¯    |   /    / /  ||  \ /·\  /  \  __/_
  517.  //   / //    |+   \   \      \  \___/   |   \___/ /   |·   \/  \/   /      /
  518. /·   /  \\         /    \     /    |:    |        /         /       /      /
  519. \___/    \________/_____|\___/:    |_____|_______/\________/_______/______/
  520.                              l_____|·MBB·
  521.  
  522.