005
25.09.2002, 16:56 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ja schon, aber wenn a als ein Array deklariert ist, also als
so kann das a ohne index oder weiteren Operator nur als rvalue verwendet werden, nicht jedoch als lvalue. Das bedeutet, dass man a keinen neuen Wert zuweisen kann, wie es etwa der ++op tut. In meinen Augen ist Pointer!=Array. Man kann ein Array implizit konvertieren und dann so verwenden wie du sagst. Jedoch sollte man sich im Klaren sein, dass dies eine Implizite konvertierung ist.
Hier mal ein kleines Demo zu dem Thema. Wenn ich daheim bin, schau ich mal im Standard nach:
C++: |
/* Demo für die falsche Annahme, dass Pointer == Array sei */ #include <stdio.h>
int main() { /* Zunächst mal machen wir nix böses: wir machen ein Array mit 5 chars: */ char s[] = "Leif";
/* Wenn die landlaeufige Meinung, ein Array sein im Wesentlichen ein Pointer zutreffen würde, dann ware ein Pointer auf s vom Typ char**. Aus gutem Grund meckern hier aber gut Compiler bereits, weil diese Annahme falsch ist: */ char** ps = &s; /* Gute Compiler melden: Incompatible types */
/* Da wir ja keine Warmduscher sind, sind wir schlauer als der Compiler: Wir ignorieren die Warnung und dereferenzieren ps wieder. *ps muesste ja ein char* sein. Dieses geben wir aus. Eigenlich muesste dann ja der Text "Leif" erscheinen. Aber... */ printf("%s\n",*ps); }
|
Bei mir macht das einen coredump... -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |