Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列とアドレス)

配列とアドレスの挙動について

このQ&Aのポイント
  • 配列とアドレスの挙動について調査しました。
  • 特に、const char型の配列とポインタ変数の違いに注目しました。
  • 結果として、const char型の配列は固定アドレスを持ちますが、ポインタ変数は動的にアドレスが変わることがわかりました。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

str1の型は const char const [5] (要素数5のconst char配列) なので、 str2の型の const char * (const charへのポインタ)とは別物です。 ただし、一部の例外を除いて、 配列はその先頭要素へのポインタ(つまりconst charへのポインタ)と見なされるため、両者が同じに見えることが多いのです。 その例外というのは、 1. sizeof演算子の引数となるとき 2. アドレス演算子&の引数となるとき 3. char型の配列を文字列リテラルで初期化するとき です。 今回の場合、2番目の「アドレス演算子&の引数」になっているので違いが出ます。 それから、str1と&str1[0]は等価と見なせることがありますが、&str1とは等価ではありません。 &str1の型は const char const (*)[5] (要素数5のconst char配列へのポインタ) なので型が違うからです。 【参考】6.3: Cで"ポインターと配列は同等"というのは何を意味しているのか。 http://www.kouno.jp/home/c_faq/c6.html#3

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

>str1はポインタ変数とは違うものなのでしょうか。 違います。 const char str1[5] で定義されている配列です。 配列の変数名のみが配列の先頭アドレスを示し str1と&str1がともに&str1[0]と等価で有ることはCの初歩中の初歩ですね。

すると、全ての回答が全文表示されます。

関連するQ&A