2
char Str[][5]={"one","two","three","four","five"};
char Str1[][6]={"one","two","three","four","five","six"};

printf("Size of Str is %d",sizeof(Str));
printf("\nSize of Str1 is %d",sizeof(Str1));
//Compile on Cygwin 64 bit on windows 64bit machine

Str と Str1 のサイズを確認すると、それぞれ 25 と 36 でした。その背後にある理由は何ですか?私が宣言した文字列はどのようにメモリに格納されていますか?

4

3 に答える 3

1

初期データの長さに関係なく (配列のサイズをオーバーランしないと仮定して)、文字列ごとに固定量を割り当てているので、それが得られます。

最初のものでは、[5] バイトの 5 つの文字列があります。

 "one__two__threefour_five_"

ここで、「_」は文字列間の初期化されていないバイトです。5x5 = 25 バイト。(36 バイト配列の場合も同様)。

于 2013-08-27T19:39:45.200 に答える
1

最初のケースでは、各要素の配列サイズが 5 の 2 次元配列を使用しています。size=(maximum size of array element)*(number of array elements) i,e) 5*5=25.

同様に、2 番目のケースも、各要素の配列サイズが 6 の 2 次元配列です。つまり、合計size=(maximum size of array element)*(number of array elements)`i,e) 6*6=3 です。

コードの下の部分は、文字列の配置を示しています。

for(i = 0; i<5; i++)
    printf("%s\n", Str[i]);
于 2013-08-27T19:33:54.403 に答える
1

これらは文字列の 1 つの配列ではなく、文字の 2 次元配列です。

私が宣言した文字列はどのようにメモリに格納されていますか?

ひどく。たとえば、最初の配列の各要素は 5 バイトを占めます。そうすれば「3」になると思いますか

printf ("%s\n", Str[2]);

しかし、代わりに「threefour」が得られます。

于 2013-08-27T19:40:28.483 に答える