共用方式為


指標宣告

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

語法

declarator:
pointer選擇direct-declarator

direct-declarator:
identifier
( declarator )
direct-declarator[constant-expression選擇]
direct-declarator ( parameter-type-list )
direct-declarator(identifier-list選擇)

pointer:
*type-qualifier-list選擇
*type-qualifier-list選擇pointer

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

type-specifier 提供 物件的型別,可以是任何基本、結構或等位型別。 指標變數也可以指向函式、陣列和其他指標 (如需宣告和解譯更複雜指標類型的詳細資訊,請參閱解譯更複雜的宣告子)。

藉由建立 type-specifiervoid ,您可以延遲指標所參考之型別的規格。 這類專案稱為「指標 void 」,並寫入為 void * 。 宣告為 指標的 void 變數可用來指向任何型別的物件。 不過,若要在指標或指標所指向的物件上執行大部分作業,則必須為每項作業明確指定指標所指向的類型 (類型 char * 與類型的 void * 變數與指派相容,而不需要類型 cast.) 這類轉換可以使用類型轉換來完成。 如需詳細資訊,請參閱 類型轉換

type-qualifier可以是 constvolatile 或 兩者。 這些關鍵字分別指定程式本身無法修改指標 (const) ,或者指標可以合法地由程式控制以外的程式修改 (volatile) 。 如需 和 volatile 的詳細資訊 const ,請參閱類型限定詞

變數 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 */

變數 pointer 指向具有 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規範指出,雖然 所指向 z 的值 const int 無法由程式修改,但程式可以合法地由與程式同時執行的進程修改。 的 w 宣告會指定程式無法變更指向的值,而且程式無法修改指標。

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

此範例會宣告指向 結構類型的 list 兩個指標變數 (nextprevious) 。 只要類型定義與宣告相同, 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 具有 結構類型 idpname 宣告為另一個名為 name 之結構類型的指標。 此宣告可以在定義型別之前 name 出現。

另請參閱

宣告子和變數宣告