Compute the number of elements in an array

From CodeCodex

Revision as of 04:04, 16 August 2008 by Spoon! (Talk | contribs)

Implementations

C/C++

There is a convenient compile-time trick to get the length of a statically-allocated array, within the scope of where it is declared. (This works because the compiler can just look up to where it is declared, and read the constant length, and hard-code the number.) The trick to computing the number of elements in an array is to divide the total size of an array by the size of a given element. For example, if the total size of the array is 80 bytes and each element takes up 8 bytes, there must be 10 elements in the array.

sizeof(array) / sizeof(array[0]);

Ideally, you would put this into a macro as follows:

#define NumElm(array) (sizeof(array) / sizeof((array)[0]))

Note: this method will not work for arrays that are zero- or null-terminated (including strings).

Note: This method will not be able to "find" the length of an array given just the pointer to its first element, because the "length" is not stored anywhere at runtime. Arrays cannot be passed or returned from functions; only the pointer to its first element can. So for example, a function which takes in an array and which needs to know its length will need to take in both the pointer to the first argument and its length as separate arguments. Similarly, dynamically-allocated arrays, which exist only as pointers at compile-time, will need to have their lengths kept track of separately, if you need to know its length.

In C99, there are variable-length arrays (VLAs). The above trick should also work to find the length of VLAs. However, passing VLAs to functions also requires their lengths to be passed in separately or be known.

Java

int[] myArray;
myArray.length;

JavaScript

var myArray = new Array(5);
myArray.length;

Perl

@myArray = ();
scalar(@myArray);

PHP

$myArray = array();
count($myArray);

Python

mySeq = []
len(mySeq)