Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:arrays [2011/12/04 17:20]
wikisysop
tux:arrays [2011/12/11 20:45] (aktuell)
wikisysop
Zeile 18: Zeile 18:
 Bei der Initialisierung des Arrays wird dieses durch viele Compiler bereits mit Null gefüllt, solange nicht schon bei der Deklaration das Array initialisiert wird. Wird das Array mit weniger Elementen gefüllt, wie in //​[GROESSE]//​ vorgegeben, dann wird der verbliebene Platz mit Null gefüllt. Die Angabe der Größe //​[GROESSE]//​ des Arrays kann bei der Deklaration entfallen, wenn das Array explizit bereits bei der Deklaration initialisiert wird: Bei der Initialisierung des Arrays wird dieses durch viele Compiler bereits mit Null gefüllt, solange nicht schon bei der Deklaration das Array initialisiert wird. Wird das Array mit weniger Elementen gefüllt, wie in //​[GROESSE]//​ vorgegeben, dann wird der verbliebene Platz mit Null gefüllt. Die Angabe der Größe //​[GROESSE]//​ des Arrays kann bei der Deklaration entfallen, wenn das Array explizit bereits bei der Deklaration initialisiert wird:
  
-<code c|Initialisierung eines Arrays>​int alpha[] = {0, 1, 2, 3}; +<code c|Initialisierung eines Arrays>​int alpha [] = {0, 1, 2, 3}; 
-int beta[4] = {0, 1, 2}; /* entspricht ​int beta[4] = {0, 1, 2, 0}; */</​code>​+int beta [4] = {0, 1, 2}; /* entspricht ​»int beta [4] = {0, 1, 2, 0};« */</​code>​ 
 + 
 +Die Größe //​[GROESSE]//​ (Anzahl der Elemente) eines Arrays kann man ermitteln, in dem man den Gesamtspeicherplatz eines Arrays durch den Speicherplatzbedarf des zugrunde liegenden Datentyps teilt:  
 + 
 +<code c|sizeof_array.c>#​include <​stdio.h>​ 
 + 
 +int alpha [] = {0, 1, 2, 3}; 
 + 
 +int main() { 
 +    printf("​Das Array alpha belegt im Speicher %d Byte Platz\n",​ sizeof(alpha));​ 
 +    printf("​Der Datentyp int (Integer) belegt pro Element %d Byte Platz im Speicher\n",​ sizeof(int));​ 
 +    printf("​Das Array alpha beinhaltet %d Elemente\n",​ sizeof(alpha) / sizeof(int));​ 
 +    return 0; 
 +}</​code>​ 
 + 
 +<​xterm>​$ <fc #​008000>​./​sizeof_array</​fc>​ 
 +Das Array alpha belegt im Speicher 16 Byte Platz 
 +Der Datentyp int (Integer) belegt pro Element 4 Byte Platz im Speicher 
 +Das Array alpha beinhaltet 4 Elemente</​xterm>​ 
 + 
 +Eine etwas besondere Rolle im Kontext von Arrays, spielt der Datentyp Character (char). Ein Element dieses Datentyps ist per Definition 1 Byte groß, d.h. es wird für jedes Zeichen nur ein Byte im Speicher belegt. Jedoch wird hier das Array mit dem Zeichen >><​fc #​008000>​\0</​fc><<​ abgeschlossen,​ was bedeutet, dass bei der Deklaration eines Zeichenfeld Arrays ein Zeichen mehr deklariert werden muss. Der String >>​Hello,​ world!<<​ zB besteht aus 13 Zeichen, beim zählen der Elemente eines Arrays, welches mit dem String >>​Hello,​ world!<<​ initialisiert ist, werden demnach 14 Elemente gezählt: 
 + 
 +<code c|char_arrays_1.c>#​include <​stdio.h>​ 
 + 
 +char alpha[] = "​Hello,​ world!";​ 
 + 
 +int main(void) { 
 + 
 +  printf("​Anzahl der Elemente des Strings '​%s'​ ist %d\n", alpha, sizeof(alpha));​ 
 +  printf("​Die Groesse eines Element des Datentyps char ist %d Byte\n",​ sizeof(char));​ 
 +  return 0; 
 +}</​code>​ 
 + 
 +<​xterm>​$ <fc #​008000>​./​char_arrays_1</​fc>​ 
 +Anzahl der Elemente des Strings '​Hello,​ world!'​ ist 14 
 +Die Groesse eines Element des Datentyps char ist 1 Byte</​xterm>​ 
 + 
 +Ein char-Array kann auf mehrere Weisen initialisiert und auch ausgegeben werden: 
 + 
 +<code c|int_char_arrays.c>#​include <​stdio.h>​ 
 + 
 +char alpha01[14] = {72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33, 0}; 
 +char alpha02[14] = {'​H',​ '​e',​ '​l',​ '​l',​ '​o',​ ',',​ ' ', '​w',​ '​o',​ '​r',​ '​l',​ '​d',​ '​!',​ '​\0'​};​ 
 +char alpha03[] ​  = "​Hello,​ world!";​ 
 +int i; 
 + 
 +int main(void) { 
 +    printf("​%s\n",​ alpha01); 
 +    printf("​%s\n",​ alpha02); 
 +    printf("​%s\n",​ alpha03); 
 + 
 +    for(i=0; i<​sizeof(alpha01);​ i++) { 
 +       ​printf("​%c",​ alpha01[i]);​ 
 +    } 
 +    printf("​\n"​);​ 
 + 
 +    for(i=0; i<​sizeof(alpha02);​ i++) { 
 +       ​printf("​%c",​ alpha02[i]);​ 
 +    } 
 +    printf("​\n"​);​ 
 + 
 +    for(i=0; i<​sizeof(alpha03);​ i++) { 
 +       ​printf("​%c",​ alpha03[i]);​ 
 +    } 
 +    printf("​\n"​);​ 
 + 
 +    return 0; 
 +}</​code>​ 
 + 
 +Dieser Coder gibt erst mal immer den gleichen String >><​fc #​008000>​Hello,​ world!</​fc><<​ aus, welcher auf unterschiedliche Weise in ein char-Array kopiert wurde. 
 + 
 +<​xterm>​$ <fc #​008000>​./​int_char_arrays</​fc>​  
 +Hello, world! 
 +Hello, world! 
 +Hello, world! 
 +Hello, world! 
 +Hello, world! 
 +Hello, world! 
 +</​xterm>​ 
 + 
 +Damit man den Inhalt der Arrays >>​alpha01<<​ und >>​alpha02<<​ nicht selber ausrechnen und tippen muss, kann man die Ausgabe mit geeigneten Formatierungszeichen so hinbiegen, dass man sie so schon übernehmen kann: 
 + 
 +<code c|out_char_arrays.c>#​include <​stdio.h>​ 
 + 
 +char alpha[] = "​Hello,​ world!";​ 
 +int i; 
 + 
 +int main(void) { 
 + 
 +  for(i=0; i<​sizeof(alpha);​ i++) { 
 +       ​printf("​%d,​ ", alpha[i]); /* %d gibt den Inhalt als dezimale Ganzzahl aus */ 
 +    } 
 +    printf("​\n"​);​ 
 + 
 +    for(i = 0; i < sizeof(alpha) -1; i++) { 
 +       ​printf("'​%c',​ ", alpha[i]); /* %c gibt den Character, also das Zeichen als solches aus */ 
 +    } 
 + 
 +    printf("​\n"​);​ 
 +    return 0; 
 +}</​code>​ 
 + 
 +<​xterm>​$ <fc #​008000>​./​out_char_arrays</​fc>​  
 +72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33, 0,  
 +'​H',​ '​e',​ '​l',​ '​l',​ '​o',​ ',',​ ' ', '​w',​ '​o',​ '​r',​ '​l',​ '​d',​ '​!',</​xterm>​ 
tux/arrays.1323015659.txt.gz (8032 views) · Zuletzt geändert: 2011/12/04 17:20 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0