2012-02-24 92 views

回答

2

const const是多余的,它会减少到const

让我们重写:

int * const *b; 

所以b是一个指向一个常量指针为int。用一个例子:

int main(int argc, char **argv) { 
    int i = 5; 
    int *ip = &i; 
    int * const const * b = &ip; 

    (**b)++; /* legal */ 
    (*b)++; /* illegal */ 
    (b)++; /* legal */ 

    return 0; 
} 
2

另见that question,这是有效的C99,但不是有效的C++也不有效C89。

它只是一个指向const指针的指针。 Const适用于左边的内容,除非它的左边没有内容:然后它适用于右边。

这里你只是有冗余redundancy,这是重复的,你真的确定它是const并且不会变异。

这里你只是有冗余redundancy,这是重复的,你真的确定它是const并且不会变异。

即使cdecl.org告诉b is pointer to const const pointer to int

0

它是相同的:

int * const * b; 

这是一个指向const指针int

const const是C99/C11法律和相同const

(C99,6.7.3p4)“如果相同的预选赛出现在同一说明符限定符列表不止一次,无论是直接或通过一个或多个typedef,行为就像它只出现一次一样。“

但是,这是一个约束冲突中C89:

(C90,6.5.3)“同样类型修饰符不得不止一次出现在同一说明符列表或预选赛名单,无论是直接或者通过一个或多个typedef。“

0

这基本上是一个int ** 或指针的指针为int 或一个指向int数组(其中int *是引用一个int[]

const位于后int *装置的方式指针不能被修改(尽管它的内容可以),这与const int *相反

第二个const被超级忽略和忽略。

2

混淆声明的一般解决方案:反向读取。虽然在这种情况下,您应该先删除冗余const

所以这个:

int * const * b; 

变为:

b  // b is a 
*  // pointer to 
const // a constant 
*  // pointer to 
int // an int 

在英语中,因此:一个指向一个常量指针为int。

正如其他人所提到的,这是int **的一个版本。

相关问题