Это не имеет смысла для меня:
int start_tab[2];
printf("size of an array: %d\n", sizeof(start_tab));
8
Почему 8? Как сделать так, чтобы он был размером 2?
Это не имеет смысла для меня:
int start_tab[2];
printf("size of an array: %d\n", sizeof(start_tab));
8
Почему 8? Как сделать так, чтобы он был размером 2?
Обратите внимание, sizeof
— это оператор, а не функция. sizeof
возвращает размер предоставленного типа данных.
Почему 8?
start_tab
типа int [2]
возвращает 2 * sizeof (int)
# или 8
.
Как сделать так, чтобы он был размером 2?
Если вы хотите получить количество элементов в массиве, просто разделите общий размер на размер одного элемента, например
sizeof(start_tab) / sizeof(start_tab[0])
# На вашей платформе sizeof(int)
== 4.
Вам нужно разделить на размер типа, как это
sizeof(start_tab) / sizeof(int)
sizeof
дает размер в байтах, поскольку каждый int
равен 4
байтам, тогда два из них, очевидно, равны восьми, поэтому вы можете разделить на размер int
и получить искомое значение.
Вы должны сделать sizeof(start_tab)/sizeof(start_tab[0])
, чтобы получить количество элементов в массиве
Поскольку int составляет 4
байт... так что умножьте на 2
, получите 8
Итак, если вы хотите, чтобы размер элемента разделился на sizeof(int)
.
Потому что int
на вашей платформе 32-битный, что составляет 4
байта. У вас есть 2
int
s, умноженные на 32 бита, равные 64 битам, что составляет 8
байт. sizeof
вернет размер типа данных в байтах.
Из стандарта C (6.5.3.4 Операторы sizeof и alignof)
2 Операция sizeof возвращает размер (в байтах) своего операнда, который может быть выражением или именем типа в скобках.
Множество
int start_tab[2];
занимает 2 * sizeof( int )
байт, потому что он состоит из двух элементов, и каждый элемент имеет тип int
. Таким образом, если sizeof( int )
равно 4
, то массив занимает 8
байт.
Итак, у вас есть формула
sizeof( start_tab ) = 2 * sizeof( int )
Или в общем случае, если массив имеет N элементов типа T, например,
T array[N];
тогда
sizeof( array ) = N * sizeof( T )
Или, поскольку каждый элемент массива имеет тип T, включая первый элемент массива, вы также можете написать
sizeof( array ) = N * sizeof( array[0] )
Используя эту формулу, вы можете рассчитать N как
N = sizeof( array ) / sizeof( array[0] )
or
N = sizeof( array ) / sizeof( *array )
потому что *array
дает первый элемент массива.
sizeof
? - person juanchopanza   schedule 07.04.2015