018
19.01.2004, 19:15 Uhr
Pablo
Supertux (Operator)
|
void ist ein Datentyp, das quasi sagt, dass man kein Datentyp hat. In VB und andere Sprachen macht man immer den Unterschied zwischen Funktionen, die einen Wert zurückliefern und die keinen Wert zurückliefern. Funktionen leifern Werte zurück und Procedures liefern keine Werte zurück. In C/C++ gibt es keinen 2. Namen dafür, sondern die bezeichnung void, damit der Compiler weißt, dass die Funktion gar nix zurückliefert.
C++: |
int liefere3zurück() { printf("Ich liefere 3 zurück\n"); return 3; // man bekommt den Wert 3, wenn man diese Funktion aufruft } void lieferenix() { printf("Ich führe nur Sachen aus, geben aber nix zurück\n"); }
|
Somit wissen wir, dass lieferenix() keinen Wert zurückliefert.
Wenn man auch sagen will, dass eine Funktion keine Parameter braucht, um aufgerufen zu werden, benutzt man auch void
C++: |
int foo(void) { // tue etwas return 5; }
|
void ist aber kein Datentyp, d.h. das ist ungültig
C++: |
int x=9; // gültig void k; // ungültig void* p=NULL; // gültig
|
void* ist die Bezeichnung für einen Zeiger. D.h. p zeigt im diesem Moment auf NULL, aber du kannst dann p = (char*) "hallo"; schreiben und dann zeigt p auf die Zeichenkette "hallo" oder p = &x; dann zeigt p auf den Wert der Variable x. void* benutzt man, wenn man den Datentyp einer Variable erst während der Laufzeit bestimmen muss, oder wenn eine Funktion einen Zeiger zurückiefert, ohne dass es der Datentyp bekannt ist, z.b. malloc tut das.
Was dem * angeht:
C++: |
int x=7; int* pointer=&x; // pointer als Variable speichert eine Adresse des Speichers, nämlich die, die x speichert. // wenn ich den Wert von x verändern will, (ich meine damit über den Zeiger, muss ich // folgendes tun) *pointer=5;// an dieser Stelle hat speichert x nicht mehr 7 sondern 5
|
Mit * kannst du den Inhalt eines Pointers ansprechen. Ich glaube, das Beispiel erklärt das besser.
Was dem ? angeht: Es gibt in C/C++ einen 3 stelligen Operator cond ? true : [/i] false[/i];
cond muss eine boolsche Bedingung sein, z.b 3<6. Das leifert entweder true oder false. Wenn die Bedingung wahr ist, dann wir den Befehl von nach den Fragezeichen ausgeführt, andersfalls den Befehl nach dem Doppelpunkt.
Was glaubst du, was x speichert? Wenn du 8 meinst, leigst du falsch, sondern 9. Und zwar weil 5<3 false zurückliefert, also wird ausgeführt bzw. zurückgelifert das was nach dem Doppelpunkt steht.
In C gibt es den datentyp bool nicht, also true und false auch nicht. Man simuliert true, wenn der Wert ungleich 0 ist und false, wenn der Wert gleich 0 ist.
C++: |
int x=9; int* z=&x; int u = *z ? 4 : 1;
|
Was speichert u? *z lifert dann 9, 9 ist ungleich 0, also true, d.h. u speichert 4. Ich glaube, dass sollte dir alles klar machen. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! |