2017-10-17 20 views
0

Cがメモリにどのように配列を格納するのか混乱しています。以下の例から、str1のアドレスはその値に等しい。私は結果をメモリアドレス&として解釈していました。str1にはアドレス自体の値が入っています。しかし、これは当てはまりません。他の例では、str1のアドレスに文字列の最初の値(この場合は "H")が含まれていることが分かりました。Cの配列名のメモリ位置

私の質問になることができます:str1のアドレスはどこに保存されていますか?

#include <stdio.h> 

int main(int argc, char const *argv[]) { 
    char str1[] = "Hello World"; 
    printf("%d %d %c\n",&str1,str1,str1[0]); 
    return 0; 
} 
+0

「str1のアドレス」と言うとき、それはどういう意味ですか? –

+0

'str1'は配列なので、ここでその名前を使用するとそのアドレスになります。 '&str1'は' str1'と同じ値に評価されます。 'str1 [0]'は最初の要素の値です。 –

+0

@PaulOgilvie '&str1'と' str1'は同じ値ですが異なる型を評価します。 –

答えて

1

まず、アドレス(ポインタ)を印刷するには、%pフォーマット指定子を使用する必要があります。 C11を引用言われていること

、それはsizeofオペレータ、_Alignofオペレータ、または 単項&演算子のオペランドである、または文字列リテラル使用されている場合を除き章§6.3.2.1

配列を初期化するために、 型の配列 '型の配列'を持つ式は、配列オブジェクトの最初の要素に を指し、左辺値ではない型 ''ポインタ型 ''の式に変換されます。

ので、基本的には、

printf("%p", str1); 
    printf("%p", &str1[0]); 

は同じです。

今、の部分に来て、よく、種類が異なります。タイプはchar [<array size>]です。

関連する問題