一直都记不住char *const与const char*哪个表示常量指针,哪个表示指向常量的指针,直到读完《The c++ programming language》第4章
c++标示符由四部分组成:(可有可无的)分类符(specifier), 类型名, declarator(不知道对应的中文术语是啥), 以及(可有可无的)初始化部分,如:
char *kings[] = {"Antigonus", "Seleucus", "Ptolemy"}
在这里,类型名是char, declarator是 *kings[], 初始化部分是 ={……}
分类符(specifier)通常是一个初始化关键字,如virtual, extern, 通常用来指示所声明的标示符的附加属性
declarator包括被声明的标示符名字和可有可无的声明操作符,常见的声明操作符如下:
* 指针 前置
*const 常量指针 前置
& 引用 前置
[] 数组 后置
() 函数 后置
declarator后置时与前置相比具有更高的优先级,因此,*kings[]声明kings首先是一个数组,数组中的元素为指针,而*func()则声明func首先是一个函数,该函数的声明操作符为指针,因此其返回一个指针,如果需要声明一个指向函数的指针,需要显式的用括号改变declarator的优先级,如(*funcP)()
在这里,作者的表述颠覆了我对标示符声明的理解,通过上面的表述,char *const 与const char*的区别自然也就清楚了
阅读(959) | 评论(0) | 转发(0) |