C言語

【C言語】データ型や変数のサイズを取得する方法

C言語で型や変数などのサイズを取得するには sizeof という単項の演算子を使います。

sizeof演算子

sizeof の後に変数や式、カッコでくくった型名を書くことでサイズをバイト単位で返します。戻り値は size_t型 という実装定義の符号無し整数型で返されます。

sizeof 変数や式
sizeof(変数や式)

sizeof(データ型)
変数や式を指定する場合、カッコの記述はどちらでも良い。個人的にはカッコで括った方が見やすい。

sizeof は以下のようなものに使うことができます。

  • 整数型
  • 浮動小数点数型
  • 列挙型
  • ポインタ型
  • 構造体
  • 共用体
  • C++のクラス

試しに色々なもののサイズを出力してみます。

#include <stdio.h>

// 構造体
struct Data
{
    int i;
    double d;
};

int main() {

    char c;
    short s;
    int i;
    float f;
    struct Data d;
    
    printf("char c: %lu\n", sizeof(c));
    printf("short s: %lu\n", sizeof(s));
    printf("int i: %lu\n", sizeof i);
    printf("float f: %lu\n", sizeof f);
    printf("Data d: %lu\n", sizeof d);
    printf("int: %lu\n", sizeof(int));
    printf("double: %lu\n", sizeof(double));

}

実行結果

char c: 1
short s: 2
int i: 4
float f: 4
Data d: 16
int: 4
double: 8

配列のサイズ

配列のサイズも取得できます。配列のサイズは 型のサイズ * 要素数 となっています。

#include <stdio.h>

int main() {

    char c[10];
    int i[10];

    printf("c[10]: %lu\n", sizeof(c));
    printf("i[10]: %lu\n", sizeof(i));

}

実行結果

c[10]: 10
i[10]: 40

この性質を利用して 全体のサイズ / 要素のサイズ で要素数を取得することができます。

#include <stdio.h>

int main() {

    int i[10];

    // 全体のサイズ / 要素のサイズ = 要素数
    printf("%lu / %lu = %lu\n", sizeof(i), sizeof(i[0]), sizeof(i) / sizeof(i[0]));

}

実行結果

40 / 4 = 10

サイズを使用することで要素数を簡単に取得することができました。

まとめ

この記事は、変数やデータ型のサイズを取得する方法を解説しました。

sizeof演算子を使うことで簡単にサイズを取得することができましたが、構造体や配列の場合は、中身によってサイズが異なることに注意しましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

C言語おすすめ参考書
MMGames (著), 秀和システム(出版)
中山 清喬 (著), 株式会社フレアリンク (著)