指標宣告
指標宣告會為指標變數命名,並指定變數所指向的物件類型。 宣告為指標的變數會保留記憶體位址。
語法
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-specifier
void
,您可以延遲指標所參考之型別的規格。 這類專案稱為「指標 void
」,並寫入為 void *
。 宣告為 指標的 void
變數可用來指向任何型別的物件。 不過,若要在指標或指標所指向的物件上執行大部分作業,則必須為每項作業明確指定指標所指向的類型 (類型 char *
與類型的 void *
變數與指派相容,而不需要類型 cast.) 這類轉換可以使用類型轉換來完成。 如需詳細資訊,請參閱 類型轉換。
type-qualifier
可以是 const
或 volatile
或 兩者。 這些關鍵字分別指定程式本身無法修改指標 (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
兩個指標變數 (next
和 previous
) 。 只要類型定義與宣告相同, 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
出現。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應