指针声明
“指针声明”命名变量一的指针并指定变量指向的对象的类型。 为指针声明的变量存放一个内存地址。
语法
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 类型定义之前,此说明可能出现。