Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:arrays [2011/12/04 17:22]
wikisysop [Eindimensionale Arrays]
tux:arrays [2011/12/11 20:45] (aktuell)
wikisysop
Zeile 20: Zeile 20:
 <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.1323015748.txt.gz (8045 views) · Zuletzt geändert: 2011/12/04 17:22 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