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