6.7.7.2 指针声明符
语义
- 若在声明
T D1中,D1形如:
c
* attribute-specifier-sequenceopt type-qualifier-listopt D1
那么 D 所声明实体的类型会被改造成“指向 T 的指针”,并保留可能写在 * 后面的限定符。
这些限定符限定的是指针本身,不是被指向对象。
写在
*后面的属性,也附着到这个指针类型,而不是目标对象。两个指针类型要兼容,必须满足:
- 指针本身具有相同限定方式;
- 它们指向的类型彼此兼容。
典型例子
- 下面两句意思完全不同:
c
const int *ptr_to_constant;
int *const constant_ptr;1
2
2
第一条表示“可改指针,指向不可经该指针修改的
int”。第二条表示“常量指针,始终指向同一位置,但那里的
int可以被修改”。若写成:
c
typedef int *int_ptr;
const int_ptr p;1
2
2
这里的 const 修饰的是 int_ptr 这个整体,因此 p 是“常量指针”,不是“指向常量 int 的指针”。