On Mon, Jan 14, 2002 at 06:13:07PM +0100, Steffen Liebergeld wrote:
Hi,
hier kommt das erste kleine C++ Problem für diese Woche: Ich möchte aus einer Datei eine Zahl einlesen. Also habe ich ersteinmal den Betreffenden Bereich der Datei in ein char Array geschrieben, was ja auch funktioniert (daher das cout << RAM). Besser wäre es jedoch wenn das Array ein *RAM[] wäre (ähnlich wie *argv[]). Nur weiss ich leider nicht, wie man in ein solches Array schreiben kann. Ein char *RAM[8]; (...) RAM[8] = fgetc(ptr); gibt folgerichtig ein Segmentation fault. Gibt es eine Möglichkeit das Array so anzulegen? Oder gibt es vielleicht auch eine Möglichkeit ein normales Array (RAM[8]) in eine int Zahl umzuwandeln?
Also mal zum Zusammenhang zwischen Pointern und Arrays:
Bsp. a) Ich defininiere einen Array von chars
char myarray[8];
die Variable myarray ist jetzt logischerweise vom Typ char* und zegt auf den Anfang des Arrays. Das erste und zweite Element koennte ich jetzt so beschreiben
char *pc = myarray; *pc = 'a'; pc++; *pc = 'b';
Bsp. b) Jetzt definieren wir einen zweidimensionalen Array
char myarray[8][8];
Jetzt haengt der Typ von der Betrachtungsweise der einzelnen Elemente ab. i) Wenn ich ein konkretes Element haben will, gebe ich "Spalte" und "Zeile" an:
myarray[1][5] = 'a'; //typ char
ii) Wenn ich nur die "Zeile" angebe, erhalte ich einen char* (analog Bsp. a))
char* pc = myarray[0]; strncpy(pc, "Hello\n", 8);
Der Pointer zeigt dann auf den Anfang des "Subarrays"
ii) Wenn ich nur myarray angebe, erhalte ich einen char** (lies: Pointer auf einen Pointer). D.h. myarray zeigt auf den Anfang des Arrays (ist also ein char*), der seinerseits wieder aus Unterarrays besteht, d.h. jedes Element davon ist (siehe a)) ein char*. Deswegen ist myarray vom Tp char**.
Das sollte deine Frage dann beantworten. Das Konzept ist am Anfang etwas schwer zu verstehen, ergibt aber zum Schluss Sinn. :)
cu, Ulf