2017-06-05 10 views
0

C++ Primer exercise 2.27第5版。
演習:次のうちどれが合法ですか?理由を説明。C++ Primer Lippman第5練習2.27 b

(b)はint *const p2 = &i2;

これは法的に応じて次のとおりです。 https://github.com/Mooophy/Cpp-Primer/tree/master/ch02#exercise-227

私はi2がどこに宣言されています表示されないのですか? (私も正誤表を見てきました)

+0

p2は整数への 'const'ポインタとして宣言され、' i2'のアドレスで初期化されます – Zakir

+0

参照は 'p2'の宣言の後に' i2' *の宣言を示しますが、もちろん '助けてください。私が持っていない本の練習を見ることなく、伝えることは不可能です。 –

+0

@Zakir:はい、しかし、私たちは 'i2'が何であるか分かりません(ただし、' p2'の宣言の後に*表示されている宣言を参照していない限り)。訂正: 'p2'は' const''''へのポインタとして宣言されています。ポインタは 'const'ではありません。 'i2'が' const int'であれば正当です。 'i2'が非'const''int'であれば違法です。 –

答えて

0

*はタイプではなく名前を使用しているということを利用しています。

I2はこれ

int* ip, ip2; 

ないポインタ上記問題による整数として宣言されています。従って

int *const p2 = &i2; 

p2にはポインタi2のアドレスが割り当てられます。 p2の値を変更しようとしない限り、p2のconstポインタが再生されません。