Начиная с C99, sizeof оценивается во время выполнения тогда и только тогда, когда операндом является массив переменной длины, например, int a [b], где b не известно во время компиляции. В этом случае sizeof (a) оценивается во время выполнения, и его результатом является размер (в байтах) всего массива, т.е. Чтобы получить количество элементов в массиве, используйте sizeof(a) / sizeof(b)
. Из стандарта C99:
Оператор sizeof возвращает размер (в байтах) своего операнда, который может быть выражением или именем типа в скобках. Размер определяется по типу операнда. Результатом является целое число. Если тип операнда является типом массива переменной длины, операнд оценивается; в противном случае, операнд не оценивается, а результат
целочисленная константа.
Обратите внимание, что все это отличается от того, что вы получите, если выделите массив в куче, например int* a = new int[b]
. В этом случае sizeof (a) просто даст вам размер указателя на int, то есть 4 или 8 байт, независимо от того, сколько элементов в массиве.