Pekardeklarationer

En pekardeklaration namnger en pekarvariabel och anger typen av objekt som variabeln pekar på. En variabel som deklareras som pekare innehåller en minnesadress.

Syntax

declarator:
pointer väljadirect-declarator

direct-declarator:
identifier
( declarator )
direct-declarator [ constant-expression välja]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-list välja)

pointer:
* type-qualifier-list välja
* type-qualifier-list väljapointer

type-qualifier-list:
type-qualifier
type-qualifier-list type-qualifier

type-specifier Ger typen av objektet, som kan vara valfri grundläggande, struktur eller union typ. Pekarvariabler kan också peka på funktioner, matriser och andra pekare. (Information om hur du deklarerar och tolkar mer komplexa pekartyper finns i Tolka mer komplexa deklaratorer.)

Genom att göra type-specifiervoidkan du fördröja specifikationen av den typ som pekaren refererar till. Ett sådant objekt kallas för en "pekare till void" och skrivs som void *. En variabel som deklareras som pekare kan void användas för att peka på ett objekt av vilken typ som helst. Men om du vill utföra de flesta åtgärder på pekaren eller på det objekt som den pekar på, måste den typ som den pekar på uttryckligen anges för varje åtgärd. (Variabler av typ char * och typ void * är tilldelningskompatibla utan typgjutning.) En sådan konvertering kan utföras med en typgjuten. Mer information finns iType-Cast Konverteringar.

type-qualifier Kan vara antingen const eller volatile, eller båda. Dessa nyckelord anger att pekaren inte kan ändras av själva programmet (const), eller att pekaren kan ändras legitimt av någon process utanför programmets kontroll (volatile). Mer information om const och volatilefinns i Typkvalificerare.

Namnger declarator variabeln och kan innehålla en typmodifierare. Om declarator till exempel representerar en matris ändras typen av pekare så att den är en pekare till en matris.

Du kan deklarera en pekare till en struktur, union eller uppräkningstyp innan du definierar typen struktur, union eller uppräkning. Du deklarerar pekaren med hjälp av struktur- eller unionstaggen enligt exemplen. Sådana deklarationer tillåts eftersom kompilatorn inte behöver veta storleken på strukturen eller unionen för att allokera utrymme för pekarvariabeln.

Exempel

I följande exempel visas pekardeklarationer.

char *message; /* Declares a pointer variable named message */

Pekaren message pekar på en variabel med char typen .

int *pointers[10];  /* Declares an array of pointers */

Matrisen pointers har 10 element. Varje element är en pekare till en variabel med int typ.

int (*pointer)[10]; /* Declares a pointer to an array of 10 elements */

Variabeln pointer pekar på en matris med 10 element. Varje element i den här matrisen har int typ.

int const *x;      /* Declares a pointer variable, x,
                      to a constant value */

Pekaren x kan ändras så att den pekar på ett annat int värde, men det värde som den pekar på kan inte ändras.

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;

Variabeln y i dessa deklarationer deklareras som en konstant pekare till ett int värde. Värdet som det pekar på kan ändras, men själva pekaren måste alltid peka på samma plats: adressen fixed_objecttill . z På samma sätt är en konstant pekare, men den deklareras också att peka på en int vars värde inte kan ändras av programmet. Specificeraren volatile anger att även om värdet för det const int som pekas på z inte kan ändras av programmet, kan det ändras på ett legitimt sätt av en process som körs samtidigt med programmet. Deklarationen w anger att programmet inte kan ändra det värde som pekar på och att programmet inte kan ändra pekaren.

struct list *next, *previous; /* Uses the tag for list */

I det här exemplet deklareras två pekarvariabler (next och previous) som pekar på strukturtypen list. Den här deklarationen kan visas före definitionen av list strukturtypen (se nästa exempel) så länge typdefinitionen list har samma synlighet som deklarationen.

struct list
{
    char *token;
    int count;
    struct list *next;
} line;

Variabeln line har strukturtypen med namnet list. Strukturtypen list har tre medlemmar: den första medlemmen är en pekare till ett char värde, den andra är ett int värde och den tredje är en pekare till en annan list struktur.

struct id
{
    unsigned int id_no;
    struct name *pname;
} record;

Variabeln record har strukturtypen id. pname deklareras som en pekare till en annan strukturtyp med namnet name. Den här deklarationen name kan visas innan typen har definierats.

Se även

Deklaratorer och variabeldeklarationer