検索

ホームページ  >  に質問  >  本文

c++ - 数组的大小的问题

1

2

3

4

5

6

7

8

9

10

<code>#include <iostream>

 

using namespace std;

 

int main()

{

    char*a[]={"zzzz","zz","zzzzzzz"};

    cout << sizeof(a) << endl;

    return 0;

}</code>

为什么输出是24呢?为什么数组的大小不是5 + 3 + 8 = 16呢?

天蓬老师天蓬老师2810日前545

全員に返信(2)返信します

  • 巴扎黑

    巴扎黑2017-04-17 14:50:36

    a は 3 つの文字列定数のアドレスを格納します。アドレスはポインタでもありません。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    <code> |----------|

            |xxxxxx|

            |----------| |----------|

     --> ポインタ 1 |

            |----------| |----------|

            | ポインタ 2 | ------------------------>

            |----------| |----------|

            | ポインタ 3 |

            |----------| |----------|

            | xxxxx | <!--コード--></code>

    1

    <code>sizeof(a) == 3 * sizeof(ポインタ) = 24</code>

    32 ビットのオペレーティング システムを使用している場合、ポインタの長さは 4 バイト、64 ビットの場合は 8 バイトであるため、コンパイル環境は 64 ビットであると推測できます。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:50:36

    C/C++ 宣言は左から右に読み取ることができません。右に何もない場合は、カーソルを左に移動します。左側では、前のレベルに移動します。最初のステップが括弧に対して繰り返され、括弧がなくなると終了します。 [1]

    つまり、char* a[] は次のことを意味します。

    1

    <code class="nohighlight">a は char へのポインタの配列です</code>

    文字列リテラルを使用して char* を初期化する場合、ポインタ変数はメモリ内の文字列定数のアドレスを格納します。

    つまり、

    1

    <code class="c">sizeof(a) == 3 * sizeof(char*)</code>

    64 ビット システムの場合、

    1

    <code class="c">sizeof(char*) == 8</code>

    それで

    1

    <code class="c">sizeof(a) == 24</code>

    <時間>

    さらに、C/C++ の配列のサイズは、常に配列内の 1 つの要素のサイズに配列内の要素の数を乗算したものと等しくなります。

    これは、配列のサイズを計算するときは常に、複数の等しくない数値を加算しないことを意味します。

    変数が占めるメモリ空間をその部分の合計と等しくしたい場合は、次のように記述できます。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    <code class="C">#include <stdio.h>

     

    int main() {

      構造体 {

        文字 a[5];

        文字 b[3];

        char c[8];

      a = {"zzzz", "zz", "zzzzzzzz"};

     

      printf("%lu\n", sizeof(a)); // 16 = 5 + 3 + 8

    }

    </stdio.h></code>

    返事
    0
  • キャンセル返事