int * const const * b
“int * const const * b”是什么意思?
这是什么意思? cdecl说declare b as pointer to const const pointer to int
。 有人可以解释它吗?
int * const const * b
“int * const const * b”是什么意思?
这是什么意思? cdecl说declare b as pointer to const const pointer to int
。 有人可以解释它吗?
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;
}
另见that question,这是有效的C99,但不是有效的C++也不有效C89。
它只是一个指向const指针的指针。 Const适用于左边的内容,除非它的左边没有内容:然后它适用于右边。
这里你只是有冗余redundancy,这是重复的,你真的确定它是const并且不会变异。
这里你只是有冗余redundancy,这是重复的,你真的确定它是const并且不会变异。
即使cdecl.org告诉b is pointer to const const pointer to int
。
它是相同的:
int * const * b;
这是一个指向const
指针int
。
const const
是C99/C11法律和相同const
:
(C99,6.7.3p4)“如果相同的预选赛出现在同一说明符限定符列表不止一次,无论是直接或通过一个或多个typedef,行为就像它只出现一次一样。“
但是,这是一个约束冲突中C89:
(C90,6.5.3)“同样类型修饰符不得不止一次出现在同一说明符列表或预选赛名单,无论是直接或者通过一个或多个typedef。“
这基本上是一个int **
或指针的指针为int 或一个指向int数组(其中int *
是引用一个int[]
的const
位于后int *
装置的方式指针不能被修改(尽管它的内容可以),这与const int *
相反
第二个const
被超级忽略和忽略。
混淆声明的一般解决方案:反向读取。虽然在这种情况下,您应该先删除冗余const
。
所以这个:
int * const * b;
变为:
b // b is a
* // pointer to
const // a constant
* // pointer to
int // an int
在英语中,因此:一个指向一个常量指针为int。
正如其他人所提到的,这是int **
的一个版本。