指標宣告
「 指標宣告 」 命名指標變數,並指定該變數所指向的物件型別。 做為指標所宣告的變數會保留的記憶體位址。
語法
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型別定義。