Zeiger-Deklarationen
Namen einer „Zeigerdeklaration“ eine Zeigervariable und gibt den Objekttyp an, zu dem die variablen Punkte.Eine Variable, die als Zeiger deklariert wird, behält eine Speicheradresse an.
Syntax
declarator:
pointeroptdirektDeklaratorDirektDeklarator:
identifier( Deklarator )
DirektDeklarator [ konstanter Ausdruckopt**]**
DirektDeklarator ( PARAMETER-TYPEListe )
DirektDeklarator ( Namenlisteopt**)**
pointer:
TYPE-Qualifizierer Liste*-opt*-TYPE-QualifiziererListeoptpointer
TYPE-QualifiziererListe:
Qualifizierer TYPETYPE-QualifiziererListe TYPEQualifizierer
Der Typspezifizierer gibt den Typ des Objekts, das jedes einfache sein können, Struktur- oder Union-Typs.Zeigervariablen können sich auf Funktionen, Arrays und andere Zeiger ebenfalls veranschaulichen.(Weitere Informationen zum Deklarieren und Interpretieren von komplexeren Zeigertypen finden Sie unter Komplexere interpretieren Deklaratorenan.)
Mit dem *Typspezifizierer *voidausführen, können Sie Spezifikation des Typs verzögert werden, auf den der Zeiger verweist.Ein solches Element so genannte „Zeiger auf void“ und wird als void *geschrieben.Eine Variable, die als Zeiger auf void deklariert wird, kann verwendet werden, um zu einem Objekt eines beliebigen Typs verweisen.Die meisten Operationen für den Zeiger oder für das Objekt, an das diese ausgeführt werden muss, Typ zeigt, auf dem er zeigt für jeden Vorgang explizit angegeben werden.(Variablen des Typs char * und des Typs void * sind ohne eine Typumwandlung. Zuweisung-kompatibel) Diese Konvertierung kann mithilfe einer Typumwandlung erzielt werden (weitere Informationen finden Sie unter Typumwandlungs-Konvertierungen ).
Der Qualifizierer kann entweder constTYPE oder volatileoder beides sein.Diese geben an, dass der Zeiger nicht vom Programm selbst geändert werden kann (const) oder dass sich der Zeiger von einem Prozess außerhalb der Kontrolle des Programms (volatile) hinaus auf zulässige Weise geändert werden kann.(Siehe Typ-Qualifizierer Informationen zu const und volatile).
Die Variable und die Namen declarator können einen Typ modifizierer enthalten.Wenn z. B. declarator ein Array darstellt, wird der Typ des Zeigers geändert, um einen Zeiger auf ein Array ist.
Sie können einen Zeiger auf eine Struktur, Union oder einen Enumerationstyp deklarieren, bevor Sie die Struktur, Union oder den Enumerationstyp definieren.Deklarieren Sie den Mauszeiger, indem Sie das Struktur- oder union tag wie in den folgenden Beispielen gezeigt verwenden.Derartige Deklarationen sind nicht zulässig, da der Compiler nicht um die Größe der Struktur oder Union zu kennen, um Platz für die Zeigervariable zuzuordnen.
Beispiele
Die folgenden Beispiele veranschaulichen Zeiger Deklarationen.
char *message; /* Declares a pointer variable named message */
Der message Zeiger zeigt auf eine Variable mit char-Typ.
int *pointers[10]; /* Declares an array of pointers */
Das Array pointers ; 10 Elemente jedes Element ist ein Zeiger auf eine Variable mit int-Typ.
int (*pointer)[10]; /* Declares a pointer to an array of 10 elements */
Die Zeigervariablen zeigt auf ein Array mit 10 Elementen.Jedes Element in diesem Array int-Typ.
int const *x; /* Declares a pointer variable, x,
to a constant value */
Der Zeiger x kann geändert werden, um zu einem anderen int-Wert anzeigen, sondern in den der Wert es verweist, kann nicht geändert werden.
const int some_object = 5 ;
int other_object = 37;
int *const y = &fixed_object;
int volatile *const z = &some_object;
int *const volatile w = &some_object;
Variable y in diesen Deklarationen werden als konstanter Zeiger auf ein int-Wert deklariert.Der Wert, den sie verweist, kann geändert werden, aber der Zeiger selbst muss immer auf demselben Speicherort verweisen: die Adresse von fixed_object.Ebenso ist ein konstanter z Zeiger jedoch auch dem Punkt int deklariert, dessen Wert nicht vom Programm geändert werden kann.Der zusätzliche Angabe volatile gibt an, dass, obwohl der Wert const int , auf die von z gezeigte vom Programm nicht geändert werden darf, die durch einen Prozess, der übereinstimmende mit dem Programm auf zulässige Weise geändert werden kann.Die Deklaration von w gibt an, dass das Programm den Wert nicht ändern kann, der angezeigt wird und dass das Programm den Zeiger nicht ändern kann.
struct list *next, *previous; /* Uses the tag for list */
Dieses Beispiel deklariert zwei Zeigervariablen, next und previous, die für den Strukturtyp listzeigen.Durch diese Deklaration werden kann, bevor die Definition des Strukturtyps list (siehe folgendes Beispiel), solange die list-Typdefinition die gleiche Sichtbarkeit wie die Deklaration hat.
struct list
{
char *token;
int count;
struct list *next;
} line;
Variable line hat den Strukturtyp, der listbenannt ist.Der list Strukturtyp verfügt über drei Member: erster Member ist ein Zeiger auf ein char-Wert, ist der zweite ein int-Wert, und das dritte ist ein Zeiger auf eine andere list Struktur.
struct id
{
unsigned int id_no;
struct name *pname;
} record;
Variable record hat den Strukturtyp id.Beachten Sie, dass pname als Zeiger auf einen anderen Strukturtyp deklariert wird, der namebenannt ist.Durch diese Deklaration werden kann, bevor der name-Typ definiert ist.