Oracle® Solaris Studio 12.4:C 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

6.5.2 派生类型中的类型限定符

类型限定符可修改类型名称和派生类型。派生类型是 C 声明的那些可重复应用而生成越来越复杂的类型的部分:指针、数组、函数、结构和联合。除函数之外,可使用一个或两个类型限定符更改派生类型的行为。

以下示例声明并初始化类型为 const int 并且其值未被相应的程序更改的对象。

const int five = 5;

关键字的顺序对于 C 来说不重要。例如,以下声明与第一个示例中的声明在作用上相同:

int const five = 5;
const five = 5;

以下声明用于声明一个类型为指向 const int 的指针的对象,该对象最初指向以前声明的对象。

const int *pci = &five;

指针自身没有限定类型,而是指向一个限定类型。在程序执行过程中几乎可以将指针更改为指向任何 int。除非使用强制类型转换,否则不能使用 pci 修改它所指向的对象,如下例所示:

*(int *)pci = 17;

如果 pci 实际上指向 const 对象,则此代码的行为不确定。

以下声明指示程序中的某位置存在全局对象定义,该对象具有指向 intconst 指针类型。

extern int *const cpi;

在此情况下,cpi 的值将不会被相应的程序更改,但是可用来修改它指向的对象。请注意,在该声明中,const 位于 * 之后。以下一对声明产生的效果相同:

typedef int *INT_PTR;
extern const INT_PTR cpi;

这些声明可以合并为以下声明,其中对象的类型声明为指向 const intconst 指针

const int *const cpci;