共用方式為


指標宣告

「 指標宣告 」 命名指標變數,並指定該變數所指向的物件型別。 做為指標所宣告的變數會保留的記憶體位址。

語法

  • declarator:
    pointer選擇直接宣告子

  • 直接宣告子
    identifier

    ( declarator )

    直接宣告子常數運算式選擇

    直接宣告子**(** 參數型別清單**)**

    直接宣告子**(** 識別項清單選擇**)**

  • pointer:
    *****型別限定詞清單opt

    *****型別限定詞清單optpointer

  • 型別限定詞清單
    型別限定詞

    型別限定詞清單的型別限定詞

型別規範提供的物件,它可以是任何基本、 結構或等位型別的型別。 指標變數也可以指向函式、 陣列及其他指標。 (如宣告和解譯更複雜的指標型別資訊,請參閱解譯多個複雜多個宣告。)

藉由型別規範 void,您可能會延遲將滑鼠指標所參考的型別規格。 這類項目指"指標void」,並寫成void *。 變數宣告為變數的指標, void可以用來指向任何型別的物件。 不過,在指標或它所指向的物件上,請執行大部分的操作,它所指向的型別必須明確指定每個作業。 (型別的變數 char * 和型別 void * 會轉換為型別不相容。) 這類轉換可以利用以下的型別轉換 (請參閱型別轉換轉換如需詳細資訊)。

型別限定詞可以是 const 或volatile,或兩者。 這樣會指定,分別指標不能修改程式本身 (const),或指標可合法地修改程式控制範圍內的程式的某些處理程序 (volatile)。 (請參閱的型別限定詞如需有關 const 和volatile。)

declarator能與變數的名稱包含型別修飾詞。 比方說,如果declarator表示指標型別陣列加以修改,使陣列的指標。

您定義的結構、 等位或列舉型別之前,您可以宣告變數的指標,結構、 等位或列舉型別。 您可以使用的結構或等位的標記,如下列範例所示,以宣告指標。 因為編譯器不需要知道結構或等位的指標變數配置空間的大小,會允許這類的宣告。

範例

下列範例說明指標宣告。

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

message指標會指向變數與char型別。

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

pointers陣列的 10 個元素。 每個項目是變數的指標,變數與int型別。

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

指標變數會指向 10 個元素的陣列。 此陣列中的每個元素都int型別。

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

指標x您可以修改為指向不同的int的值,但它不能修改點的值。

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;

將變數y這些宣告中宣告為常數指標int的值。 您可以修改其指向的值,但指標本身必須總是指向相同的位置: 位址fixed_object。 同樣地, z是固定變數的指標,但它也被宣告成指向int程式無法修改其值。 額外規範volatile表示雖然值 const int 所指z無法修改程式,它可合法地修改處理程序的程式同時也執行。 宣告的w指定程式不能修改滑鼠指標,而且程式無法變更所指向的值。

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

這個範例會宣告兩個指標變數, next和previous,所指向的結構型別list。 這個宣告之前的定義不可以出現list結構輸入 (請參閱下一個範例),只要list型別定義具有相同的可視性和宣告。

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

將變數line具有名為結構型別list。 list結構的型別都有三個成員: 第一個成員是變數的指標, char的值,而第二個是int值,以及第三個是到另一個指標list結構。

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

將變數record有結構型別id。 請注意, pname宣告為變數的指標,另一個名為的結構型別name。 這個宣告之前不可以出現name型別定義。

請參閱

概念

多個宣告和區域變數宣告