指標宣告會命名指標變數,並指定變數指向的物件類型。 宣告為指標的變數會保存記憶體位址。
語法
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 * 變數與指派相容,而不需要轉換類型。這類轉換可以使用類型轉換來完成。 如需詳細資訊,請參閱 Type-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 出現。