C の構造体配列に対する 'sizeof' の結果は? 質問する

C の構造体配列に対する 'sizeof' の結果は? 質問する

C では、次のように定義された構造体の配列があります。

struct D
{
    char *a;
    char *b;
    char *c;
};

static struct D a[] = {
    {
        "1a",
        "1b",
        "1c"
    },
    {
        "2a",
        "2b",
        "2c"
    }
};

配列の要素数を判定したいのですが、sizeof(a)2ではなく48という間違った結果が返ってきます。何か間違っているのでしょうか、それともsizeof単にここでは信頼できないのでしょうか? 問題になるのであれば、私は次のようにコンパイルしています。湾岸協力会議4.4.

ベストアンサー1

sizeof a / sizeof a[0];

これはコンパイル時の定数なので、たとえば別の配列を作成するために使用できます。

#define N sizeof a / sizeof a[0]
int n_a[N];

おすすめ記事