“int * const const * b”是什么意思?

时间:2012-02-24 14:53:50

标签: c declaration

int * const const * b

这是什么意思? cdecl说declare b as pointer to const const pointer to int。 有人可以解释一下吗?

5 个答案:

答案 0 :(得分:2)

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

所以让我们改写:

int * const *b;

因此b是指向int的const指针的指针。举个例子:

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;
}

答案 1 :(得分:2)

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

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

在这里你只有多余的redundancy,这是重复的,这样你就可以确定它是常量并且不会发生变异。

在这里你只有多余的redundancy,这是重复的,这样你就可以确定它是常量并且不会发生变异。

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

答案 2 :(得分:2)

混淆声明的一般解决方案:向后阅读。虽然在这种情况下,您应首先删除多余的const

所以这个:

int * const * b;

变为:

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

因此,在英语中:指向int的常量指针的指针。

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

答案 3 :(得分:0)

与以下内容相同:

int * const * b;

是指向const指向int的指针。

const const在C99 / C11中是合法的,与const相同:

  

(C99,6.7.3p4)“如果相同的限定符在同一说明符限定符列表中出现多次,无论是直接还是通过一个或多个typedef,行为都与它只出现一次相同。”

但这是C89中违反约束的行为:

  

(C90,6.5.3)“相同的类型限定符不应在同一说明符列表或限定符列表中直接或通过一个或多个typedef出现多次。”

答案 4 :(得分:0)

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

的方式

位于const之后的int *表示无法修改指针(尽管它的内容可以),这与const int *相反。

第二个const是超级的,并且被忽略了。