2011-10-12 16 views
7

以下の割り当ては有効ですか?あるいはこれらのいずれかが問題を引き起こすでしょう。提案してください。const charポインタの割り当て

const char * c1; 
const char * c2; 
const char * c3; 
char * c4; 

c2 = c1; 
c2 = c3; 
c2 = c4; 

どうすればいいですか?すべてのポインタがuninitalized残っているか、任意の有効なメモリ位置を指していないので、あなたがそれらを参照解除しません沿って

const char * c5 = "xyz"; 
char * c6 = "abc"; 

c2 = c5; 
c2 = c6; 
+0

@ Kshitij Mehta - 私たちは、宿題ではなく、膨大なコードベースを使ってメモリ問題に直面しています。だから助けていただければ幸いです。 – user32262

+0

@userあなたは今、同じ質問を数回お願いしました。私たちは何度もそれらに答えました。この質問へのあなたの編集は何も追加しません。上記の質問を繰り返すだけです。 –

+1

私は同じ事を求めていると私はお詫び申し上げます。ポインタを使った私の理解は痛烈ではないかもしれません。 – user32262

答えて

9

すべてが有効なステートメントです。

ポインタは定数ではなくポインタによって指される値が一定であるため、これらは有効です。したがって、ここのポインタは別の場所を指すように再割り当て可能です。

3

これらの割り当ては、私と他の人がほぼ同じ質問のあなたの最近の実行で説明したように完全にすべて有効です。

const char*は、そのポインタを使用して変更できないメモリへのポインタです。ここには何もそれを回避することはできません。コンパイラは、それ以来constを回避するc4 = c1を割り当てた場合、オブジェクトになります。

30

あなたの心には、アステリックを通って線を描きます。ポインタpが一定であるので、へpポイント文字です - - すなわち、両方を変更することはできませんが、左側にまでおよび

  1. const char * const p例えばポインタ

    の種類を右に指摘されているものですポインタと内容は何かpを指して

  2. const char * p-0pは定数文字を指しています。 pの値を変更し、異なる定数文字を指すようにすることができます。しかし、pが指しているものは内容を変更することはできません。
  3. char * const p - あなたはポインタを変更することはできませんが、内容

を変更し、最終的に

  1. char * pすることができます - すべてはグラブ

支援を期待するためにアップしています。

+0

最初の例で2 *を持つことを意味しますか? –

+0

非常にクリアです。ニースポスト。私はなぜ入力引数として 'const char * ptr'を変更できるのか不思議に思っていましたが、これは完全に明らかになりました。私は別の40分のために票が切れているので、私はそれの後で++です。 – stevieb

0

char * c6 = "abc";ここでは "abc"はconstリテラルなので、非constポインタに割り当てることは安全ではなく、少なくともコンパイルエラーではない場合警告を生成する必要があります(私はそれをコンパイルしようとしなかった)。

関連する問題