C 言語で配列のサイズを取得する

Satishkumar Bharadwaj 2023年10月12日
  1. sizeof() C 言語で配列のサイズを決定するための演算子
  2. C 言語で配列の長さを取得する
C 言語で配列のサイズを取得する

このチュートリアルでは、C 言語で配列の長さを決定する方法を紹介します。

sizeof() C 言語で配列のサイズを決定するための演算子

演算子 sizeof() はコンパイル時の単項演算子です。オペランドのサイズを計算するのに使われます。これは変数のサイズを返します。演算子 sizeof() はバイト単位のサイズを与えます。

演算子 sizeof()intfloatchar のようなプリミティブなデータ型や arraystruct のようなプリミティブでないデータ型にも利用できます。これはそのデータ型に割り当てられたメモリを返します。

32 ビットシステムと 64 ビットシステムでは同じデータ型でも出力が異なる場合があるように、マシンによって出力が異なる場合があります。

sizeof() の構文

sizeof(operand)
  • operand はデータ型または任意のオペランドです。

C 言語のプリミティブデータ型のための sizeof() 演算子

このプログラムはプリミティブデータ型として intfloat を使用します。

#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

関連記事 - C Array