0

const修飾子はオブジェクトにのみ影響し、型には影響しないことを知っています:

例えば:

// Only the elements of an array are constant not the array itself
const int a[5];

私が持っていたとします:

float *const p1; // 1
float const *p2; // 2

上記の最初のケースでは、ポインタがオブジェクトではなく定数であることを意味しますp1か? 型を修飾することが許可されていない場合、これはどのようになるのでしょうか?

4

2 に答える 2

2
float *const p1; // 1

ポインターp1が一定であり、別のアドレスを指すことができない (むしろすべきではない) ことを意味します。
定数であるのはポインタではなく、定数であるこの型のインスタンスですp1

これをよりよく理解するには、時計回りのスパイラル ルールを使用します。

型を修飾することが許可されていない場合、これはどのようになるのでしょうか?

これは正しくありません。実際、修飾子は型修飾子の短縮形です(§6.7.3)

于 2012-11-29T03:20:39.510 に答える
1

この宣言では:

const int a[5];

a の型は「5 つの const int の配列」です。

この宣言で

float *const p1;

p1 の型は「float への const ポインター」です。

この宣言で

const float *p2;

p2 の型は「const float へのポインター」です。

配列を const として宣言する方法はありませんが、配列を変更することはできません。配列内の要素のみを変更できます。

于 2012-11-29T03:28:07.760 に答える