typedef char* ptr;
const ptr p;
これは本当です:
p
定数文字を指します。またp
は定数で、文字を指します。
理由を説明してください
typedef char* ptr;
const ptr p;
後者の行は次と同等です
char * const p;
ieへp
のconst
ポインタchar
です。は型のtypedef
新しい名前を導入します。これはテキストによる置換ではありません。
まず、式から typedef を少し取り出してみましょう。
const char *p
両方とも、constデータへの非 constポインターとしてchar const *p
宣言します。さまざまなものを指すように割り当てることはできますが、指している対象を変更することはできません。p
p
char * const p
非 constデータへのconstポインターp
として宣言します。別のオブジェクトを指すように変更することはできませんが、指している物を変更することはできます。p
p
const char * const p
どちらもconstデータへのconstポインターとしてchar const * const p
宣言します。それはかなり自明のはずです。p
はtypedef
少し直感的ではありません。ptr
は の同義語でchar *
あるため、const ptr
として機能しchar * const
ます。修飾子は、const
型ではなくポインター型に適用されていますchar
。