共用方式為


指標宣告

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

語法

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可以是 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規範指出,雖然 程式無法修改所指向 zconst 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 出現。

另請參閱

宣告子和變數宣告