重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんばんは。

const char *pp;
char c;
const char cc = 'e';
char *p;

1・・・pp = &c;

2・・・p = &cc;

2番目はconst char *型はchar *型に変換できないと言われます。1番目も、同じだと思うのですがこのエラーメッセージが出てきません。なぜでしょうか?

A 回答 (4件)

ppの実体は変更できないけど、


pの実体は変更できてしまうから。

つまり、*ppは値を変更しない。
*pは値を変更してしまう。

ということ。
    • good
    • 0

C++でしょうか?



C言語であれば、警告が出ることはあっても、エラーにはならないはずです。
    • good
    • 0

非constオブジェクトへのポインタ(またはレファレンス)からconstオブジェクトへのポインタ(またはレファレンス)への暗黙のキャストは認められますが、その逆は認められません。



 const  → 書き換えることはできない
 非const → 書き換えることができる

ですから、非const→constへの変換は別に不都合は生じませんが、const→非constへの変換は、書き換えてはならないものを書き換えてしまう可能性があるので不都合が生じます。
よってconst→非constは暗黙にはキャストされないと定められています。
どうしてもこのようなキャストが必要であれば明示的にキャストする必要があります。
    • good
    • 0

1は逆で,char*をconst char*に代入しているのですから,扱いは違います.



constは書換え禁止と思えばいいですが,constのついていないcharは書換え「てもかまわない」だけで書き換えなくても別に違反ではありません.

pp=&cc;とするのは,pp経由(*pp)ではcを書き換えるつもりはない,というだけの事だとおもいますよ.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!