C 言語で配列のサイズを取得する
Satishkumar Bharadwaj
2023年10月12日
このチュートリアルでは、C 言語で配列の長さを決定する方法を紹介します。
sizeof()
C 言語で配列のサイズを決定するための演算子
演算子 sizeof()
はコンパイル時の単項演算子です。オペランドのサイズを計算するのに使われます。これは変数のサイズを返します。演算子 sizeof()
はバイト単位のサイズを与えます。
演算子 sizeof()
は int
、float
、char
のようなプリミティブなデータ型や array
、struct
のようなプリミティブでないデータ型にも利用できます。これはそのデータ型に割り当てられたメモリを返します。
32 ビットシステムと 64 ビットシステムでは同じデータ型でも出力が異なる場合があるように、マシンによって出力が異なる場合があります。
sizeof()
の構文
sizeof(operand)
operand
はデータ型または任意のオペランドです。
C 言語のプリミティブデータ型のための sizeof()
演算子
このプログラムはプリミティブデータ型として int
、float
を使用します。
#include <stdio.h>
int main(void) {
printf("Size of char data type: %u\n", sizeof(char));
printf("Size of int data type: %u\n", sizeof(int));
printf("Size of float data type: %u\n", sizeof(float));
printf("Size of double data type: %u\n", sizeof(double));
return 0;
}
出力:
Size of char data type: 1
Size of int data type: 4
Size of float data type: 4
Size of double data type: 8
C 言語で配列の長さを取得する
配列の合計サイズを配列の要素のサイズで割ると、配列の要素数が得られます。プログラムは以下のようになります。
#include <stdio.h>
int main(void) {
int number[16];
size_t n = sizeof(number) / sizeof(number[0]);
printf("Total elements the array can hold is: %d\n", n);
return 0;
}
出力:
Total elements the array can hold is: 16
関数のパラメータとして配列を渡すと、ポインタとして扱われます。演算子 sizeof()
は配列のサイズではなくポインタのサイズを返します。そのため、関数内ではこのメソッドは動作しません。代わりに、追加のパラメータ size_t size
を渡して配列の要素数を示すようにしてください。
#include <stdio.h>
#include <stdlib.h>
void printSizeOfIntArray(int intArray[]);
void printLengthIntArray(int intArray[]);
int main(int argc, char* argv[]) {
int integerArray[] = {0, 1, 2, 3, 4, 5, 6};
printf("sizeof of the array is: %d\n", (int)sizeof(integerArray));
printSizeOfIntArray(integerArray);
printf("Length of the array is: %d\n",
(int)(sizeof(integerArray) / sizeof(integerArray[0])));
printLengthIntArray(integerArray);
}
void printSizeOfIntArray(int intArray[]) {
printf("sizeof of the parameter is: %d\n", (int)sizeof(intArray));
}
void printLengthIntArray(int intArray[]) {
printf("Length of the parameter is: %d\n",
(int)(sizeof(intArray) / sizeof(intArray[0])));
}
出力(64 ビット Linux OS の場合):
sizeof of the array is : 28 sizeof of the parameter is : 8 Length of the array
is : 7 Length of the parameter is : 2
出力(64 ビット Linux OS の場合):
sizeof of the array is : 28 sizeof of the parameter is : 4 Length of the array
is : 7 Length of the parameter is : 1