【C言語】sizeof 演算子とは 3つの使い方も紹介

  • URLをコピーしました!

今回は、C言語のsizeof 演算子を使用して配列の要素数を取得する方法を紹介します。

さらに、sizeof 演算子の他の使用方法についても紹介しようと思います。

目次

sizeof 演算子とは

まずはじめにsizeof 演算子とはなにか紹介します。

sizeof 演算子とは、変数やデータ型の使用メモリサイズを算出するものです。

算出対象を()でくくって使用します。

sizeof(変数名);

sizeof 演算子の使用例

では実際に、sizeof 演算子の使い方をみていきましょう。

今回は、3つの使い方について紹介します。

  • 型のメモリサイズ
  • 配列の要素
  • 文字列の文字数

sizeof 演算子で型のメモリサイズを調べる

まずは型のメモリサイズを調べる方法です。

#include<stdio.h>

int main(void){

	printf("char メモリサイズ: %d\n", sizeof(char));
	printf("int メモリサイズ: %d\n", sizeof(int));
	printf("short メモリサイズ: %d\n", sizeof(short));
	printf("long メモリサイズ: %d\n", sizeof(long));

	return 0;
}

実行結果

char メモリサイズ: 1
int メモリサイズ: 4
short メモリサイズ: 2
long メモリサイズ: 8

sizeof 演算子の()に型名を入れるだけで、簡単に型のメモリサイズを調べることが可能です。

sizeof 演算子で配列の要素数を調べる

次に、sizeof 演算子を使用して、配列の要素数を調べる方法です。

配列の要素数は、「配列のメモリサイズ」と「配列の要素一つのメモリサイズ」から調べることができます。

ちょっと難しい言い方をしていますが、実際の実装をみれば、何を言っているかわかると思います。

#include<stdio.h>

int main(void){

	int num_list[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

	printf("配列全体のメモリサイズ: %d\n", sizeof(num_list));
	printf("配列ひと要素のメモリサイズ: %d\n", sizeof(num_list[0]));
	printf("配列の要素数: %d\n", sizeof(num_list) / sizeof(num_list[0]));

	return 0;
}

実行結果

配列全体のメモリサイズ: 40
配列ひと要素のメモリサイズ: 4
配列の要素数: 10

配列全体のメモリサイズを sizeof(num_list)で取得し、

sizeof(num_list[0])で配列ひと要素のメモリサイズ(0番目のメモリサイズ)を取得しています。

そして、配列全体のメモリサイズ sizeof(num_list) から

配列ひと要素のメモリサイズ sizeof(num_list[0]) を割ることで、

配列の要素数を取得できます。

sizeof 演算子で文字列の文字数を調べる

次に紹介するのは、sizeof 演算子を使用して、文字列の文字数を調べる方法です。

ただし、1点注意点があります。

取得する文字数にNULL文字が含まれる(1文字多く取得してしまう)

そのため、sizeof 演算子で文字数を取得した場合は、1文字分マイナスする必要があります。

実際には以下のように使用します。

#include<stdio.h>

int main(void){

	char moji[] = "mojisize";

	printf("NULL文字を含む文字サイズ: %d\n", sizeof(moji));
	printf("実際の文字サイズ: %d\n", sizeof(moji) - 1);

	return 0;
}

実行結果

NULL文字を含む文字サイズ: 9
実際の文字サイズ: 8

sizeof 演算子文字列 “mojisize” (8文字)の文字数を取得してみました。

sizeof(moji)で文字列の文字数を取得すると、1文字多い、9 が出力されます。

sizeof(moji) – 1 で 正しい文字数 8を出力できます。

開発現場で実際によく使用する方法

実際の開発現場でsizeof演算子をよく使用する方法について紹介します。

sizeof 演算子と memcpy 関数

sizeof 演算子は、memcpy 関数と合わせてよく使用します。

memcpy 関数とは指定のメモリサイズ分をコピーする関数です。

どういうときにこの2つをあわせて使用するかというと、

メモリから配列にデータを格納するときに使用します。

コピーするサイズ数をsizeof 演算子で取得しています。

#include<stdio.h>
#include<string.h>

int main(void){

	char moji[] = "mojisize";
	char moji2[] = "mojimojisize";

	printf("文字列 moji2: %s\n", moji2);
	memcpy(moji2, moji, sizeof(moji));
	printf("文字列 moji2: %s\n", moji2);

	return 0;
}

実行結果

文字列 moji2: mojimojisize
文字列 moji2: mojisize

文字列 moji の”mojisize” が文字列 moji2にコピーされていることがわかると思います。

sizeof 演算子で文字列 moji のサイズ数だけコピーしています。

まとめ

size of演算子は、開発現場でもよく見かけます。使い方をマスターしましょう!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次