必须明白下面语句的含义,我自己是反复记忆了许久才记住,方法是:若是想定义 一个只读属性的指针,那么关键字const要放到‘*’后面。 // since 只读指针
char *const cp; //指针不可改变,但指向的内容可以改变
char const *pc1; //指针可以改变,但指向的内容不能改变
const char *pc2; //同上(后两个声明是等同的)
(强制):如果指针所指向的类型带有const 或volatile 限定符,那么移除限定符 的强制转换是不允许的。
(11.5 A cast shall not be performed that removes any const or volatile qualification from the type
addressed by a pointer. )
任何通过强制转换移除类型限定符的企图都是对类型限定符规则的违背。注意,这里所 指的限定符与任何可以应用在指针本身的限定符不同。
uint16_t x;
uint16_t * const cpi = &x; /* 常量指针*/
uint16_t * const * pcpi ; /* 指向常量指针的指针*/
const uint16_t * * ppci ; /* 指向指针的常量指针*/
uint16_t * * ppi;
const uint16_t * pci; /* 指向常量的指针 */
volatile uint16_t * pvi; /* volatile类型指针 */
uint16_t * pi;
…
pi = cpi; /* 允许– no conversion no cast required */
pi = (uint16_t *)pci; /* 不允许 */
pi = (uint16_t *)pvi ; /* 不允许 */
ppi = (uint16_t *)pcpi ; /* 不允许 */
ppi = (uint16_t *)ppci ; /* 不允许 */