指针声明

“指针声明”命名变量一的指针并指定变量指向的对象的类型。 为指针声明的变量存放一个内存地址。

语法

  • declarator:
    pointeropt直接声明

  • 直接声明:
    identifier

    ( 声明 )

    直接声明 [ 常数表达式opt**]**

    直接声明 ( 参数类型列表 )

    直接声明 ( 标识符的列表opt**)**

  • 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 framework 类型的定义 (请参见下一个示例之前)。

struct list 
{
    char *token;
    int count;
    struct list *next;
} line;

可变 line 具有名为 list的结构类型。 list framework 类型具有三个成员:第一个成员是指向 char 值,第二是 int 值,并且,第三是指向另一 list 结构。

struct id 
{
    unsigned int id_no;
    struct name *pname;
} record;

可变 record 具有结构类型 id。 请注意 pname 声明为指向名为 name的另一个 framework 类型。 ,在 name 类型定义之前,此说明可能出现。

请参见

概念

声明和变量声明