const char *pa;
char const *pb;
上面两种定义方法一样都是 pa(pb)指向的变量的值不可改变,及*pa,*pb, 而pa,和pb本身是可变的,如:
pa = &ca; //ok
×pa = 'c' //error
char * const pc = &ca;
pc本身是不可变的(只能在定义时初始化),但指向的变量值是可变的,如
pc = &ca; //error
*pc = 'd'; //ok
const char * const pd = &cb;
pd本身是不可变的,且指向的变量也是不可变的(只能在定义时初始化)
pd = &cb; //error
*pd = 'c'; /error
通过以上总结,无论怎样定义p都是一指针
如果const在*左边,表示该指针指向的变量是不可变的
如果const在*右边,表示该指针本身是不可变得
const char **p
p[i]的值可变,而p[i][j]的值不可变。
对于
char * const *p
p[i]的值不可变,而p[i][j]的值可变。
对于
const char * const *p
p[i]的值不可变,p[i][j]的值也不可变。
由是可见,第三种对于接收参数的一方而言,是最为严厉的限制。在设计接口时,这类限制有助于减少程序中的潜在问题,但却会使使用现有接口的一些程序出现错误。许多公开的标准,特别是POSIX,往往会出于这种考虑而选择char * const *。在设计程序时,对于这种char * const*,应当作const char * const *看待,而不应abuse其p[i][j]可写的特性。
本文详细解析了C++中指针与const限定符的使用方式,包括不同位置的const含义及其对指针操作的影响。通过具体示例说明了如何定义不可变指针及指向不可变数据的指针,并探讨了这些特性在接口设计中的应用。
2634

被折叠的 条评论
为什么被折叠?



