Der Objektoperator in C
Der unäre Präfixoperator »*« wird hier Objektoperator genannt.
Ist A die Adresse eines Objektes O, so ist *A das Objekt O.
Daraus folgt:
- &O ist die Adresse des Objektes O, also ist *&O das Objekt O.
main.c
#include <stdio.h>
int main( void )
{ int i = 26;
printf( "%d\n", *&i ); }stdout
26
Dadurch, daß wir nun einen objektwertigen Operator haben, kommt es erstmals vor, daß ein komplexer Ausdruck (ein Operatorausdruck) auf der linken Seite des Gleichheitszeichen steht.
main.c
#include <stdio.h>
int main( void )
{ int i = 26; *&i = 53;
printf( "%d\n", i ); }stdout
53
Ein Ausdruck, der ein Objekt angeben kann, wird auch hier auch Objektausdruck genannt. Alles, was auf der linken Seite des Zuweisungsoperators »=« stehen kann, ist ein Objektausdruck.
In den obigen beiden Programmen sind »i« und »*&i« Objektausdrücke. Der Adressausdruck »&i« ist jedoch kein Objektausdruck.
Man sagt auch, daß der Objektoperator »*« seinen Operanden dereferenziere. Daher nennen wir *A auch den Referenten der Adresse A .
Beispiel
In dem folgenden Programm wird eine Zufallszahl verwendet, um eine von zwei Adressen auszuwählen (zu berechnen). Anschließend wird der Objektoperator verwendet, um auf der linken Seite einer Zuweisung das zu der Adresse gehörende Objekt anzugeben. So wird entweder »a« oder »b« der Wert »1« zugewiesen.
main.c
#include <stdio.h>
#include <stdlib.h>int main( void )
{ int a = 0;
int b = 0;
*( rand() /( RAND_MAX/2 )? &a : &b )= 1;
printf( "%d\n", a );
printf( "%d\n", b ); }stdout
0
1