Categories: C言語

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

この記事では、C言語で型や変数などのサイズを取得する方法を解説します。

C言語でサイズを取得するには、sizeofという単項の演算子を使います。

それでは、実際にサイズを取得してみて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演算子を使うことで簡単にサイズを取得することができましたが、構造体や配列の場合は、中身によってサイズが異なることに注意しましょう!

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago