010
12.10.2003, 17:46 Uhr
Pablo
Supertux (Operator)
|
Nochmal zum Thema: In Wirklichkeit könntest du schon die Zeichenkette als ein Array bzw. Feld von ints speichern. Da jedes Zeichen als eine Zahl sich darstellen lässt, ist das möglich:
C++: |
#include <stdio.h> int main() { int *x = "Ich bin ein Array von int und speichere eine Zeichenkette, hihi."; printf("%s\n", x); return 0; }
|
Wenn ich das kompiliere, kriege ich aber 2 Warnungen
Code: |
$ gcc -Wall ints.c -o ints ints.c: In function `main': ints.c:4: warning: initialization from incompatible pointer type ints.c:5: warning: char format, different type arg (arg 2)
|
logisch, aber führt das aus.
Code: |
$ ./ints Ich bin ein Array von int und speichere eine Zeichenkette, hihi.
|
Ob das gut ist, weiß ich nicht, ich würde das nie tun in einem ernstem Projekt. Aber du kannst casten und dann sind die Warnungen so gut wie weg und dann kannst du sie problemlos benutzen. Das Problem ist, dass der Speicherplatz von x (in meinem Fall) 4 Mal größer als von einer char* Variable, die die Zeichenkette speichern würde, weil sizeof(int) > sizeof(char) Normalerweise ist sizeof(char)==1, muss aber nicht sein. Wenn ich mich nicht irre, dann muss gelten sizeof(char) == sizeof(void) oder so.
C++: |
#include <stdio.h> int main() { int *x = (int*) "Ich bin ein Array von int und speichere eine Zeichenkette, hihi."; printf("%s\n", (char*) x); return 0; }
|
Wenn du das machst, dann sind die Warnungen weg. Würde ich trotzdem das nie machen. Das war nur ein Beispiel, dass es möglich ist, eine Zeichenkette in einem anderen Pointer zu speichern, vor allem, wenn es ein int Pointer ist. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 12.10.2003 um 17:48 Uhr von Pablo Yanez Trujillo editiert. |