2012-02-24 10 views

答えて

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

that questionを参照してください、これは有効なC99ですが、C++でも有効なC89有効ではありません。

これは単なる整数へのconstポインタへのポインタです。 Constは左に何もない限り、左にあるものに適用されます。右に適用されます。

ここでは、ちょうどあなたがそれがconstので、変異させないであろうことを本当に確信しているように繰り返される冗長 redundancy、持っています。

ここでは、冗長なredundancyがあります。このことは、それがconstであり、変異しないことが本当に確実であるように繰り返されます。

でもcdecl.orgは、b is pointer to const const pointer to intとなります。 intconstポインタへのポインタである

int * const * b; 

0

それは同じです。

const constは、C99/C11に合法であるとconstと同じです:

(C99、6.7.3p4)「同じ修飾子はどちらか、一度同じ指定子修飾子リスト内に複数表示された場合直接または1つ以上のtypedefを介して、動作は1回だけ出現した場合と同じです。

しかし、これはC89での制約違反です:

(C90、6.5.3)は「同じタイプ修飾子は、直接、同じ指定子リストまたは修飾子リストに複数回表示されてはなりませんまたは1つ以上のtypedefsを介して。

0

これは、基本的int ** またはINTへのポインタまたはint *int[]

int *手段の後に配置constを参照する方法であるint配列(へのポインタへのポインタでありますconst int *とは逆のポインタ(内容はありますが)は変更できません。

第2のconstは無視されています。

2

紛らわしい宣言の一般的な解決策:それを後方に読んでください。この場合、冗長constを削除する必要があります。

ので、この:

int * const * b; 

は次のようになります。英語で

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

、それゆえ:intへの定数ポインタへのポインタ。

他にも言及したように、これはint **のバージョンです。

関連する問題