Подскажите, как можно программно узнать размер массива? Пробовал так:
unsigned int array[12]; int size = sizeof(array);
Но в переменной size получил не 12, а 48 (догадываюсь, что связано с тем, что unsigned int - это 4 байта).
По поводу 48-ми все верно, значит на данной машине int - 4 байта, поэтому в результате получим 12 * 4 = 48. Теперь ближе к сути:
unsigned int array[12]; size_t arraySize = sizeof(array) / sizeof(array[0]);
Размер массива в байтах (48) делим на размер одного элемента (4), по итогу получаем 12.
@aveal Получается, что можно и так?
unsigned int array[12]; size_t arraySize = sizeof(array) / sizeof(int);
Я проверил, получилось 12 тоже.
@aveal Получается, что можно и так?
unsigned int array[12]; size_t arraySize = sizeof(array) / sizeof(int);Я проверил, получилось 12 тоже.
Технически да, но практически есть нюансы. Если изменится тип данных, то придется изменения внести везде, где использована такая конструкция. Соответственно, об этом очень просто забыть, что приведет к трудноотлавливаемым багам.
Плюс, мой первый вариант дает возможность обернуть все это в макрос:
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) unsigned int array[12]; size_t arraySize = ARRAY_SIZE(array);
Принято, спасибо за быстрый ответ )