- 締切済み
アドレス
char str[100]; このとき&strは配列strのアドレスだと思いますが、これは 何のアドレスですか?又strは配列の要素の先頭アドレスですが これとどう違うのでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
- titokani
- ベストアンサー率19% (341/1726)
strは配列そのものです。 ただし、一部の例外(sizeof演算子、&演算子)を除いて、配列の先頭要素へのポインタに暗黙のうちに変換されます。 この、変換された結果の型はchar *です。 一方、&strの型はchar (*)[100]です。 ちなみに、strそのものの型は、char[100]です。
- asuncion
- ベストアンサー率33% (2127/6290)
>strは配列の要素の先頭アドレスです strは配列の先頭要素のアドレスを示す、と書くのが正しいでしょう。
- maeve92
- ベストアンサー率73% (11/15)
純粋なC言語として回答します。 配列での「&」は、配列の個々の要素のアドレスを取得する場合に使用します。(例:char *p = &str[20];) ※もし「*p」とは何ぞ??という場合は、とりあえずアドレスの入れ物とでも考えて下さい。 ※配列が格納されているメモリ領域の先頭アドレスは、 質問者様の仰る通り「str」となります。 ですので、 仮にstr[100]が、メモリ領域の200番地から100byte分確保されているとすると、 (1) char *p1 = str; (2) char *p2 = &str[0]; の場合、(1)と(2)は同じアドレス(200番地)を指すことになります。 質問者様が、先頭アドレスが欲しいっという場合は&を付けず、 配列の50番目のアドレスが欲しいっという場合は、&と要素数を付けます。 ちなみに str + 要素番号(型のサイズに注意) でも同じです。
- Yune-Kichi
- ベストアンサー率74% (465/626)
> このとき&strは配列strのアドレスだと思いますが str : char型を要素型とし,要素数100個の配列型のオブジェクト &str : 「char型を要素型とし,要素数100個の配列型のオブジェクト」へのポインタ型の値 です。 > 何のアドレス アドレスに「何の」も何もありません。 規格書に定義がないのですが, 規格書を読む限りだと,「オブジェクトの各バイトを識別するための値でしかないです。 > strは配列の要素の先頭アドレスですが 違います。 strは配列型のオブジェクト以外の何者でもありません。 > これとどう違うのでしょうか? 型が違います。