Top.Mail.Ru
Уведомления
Очистить все

[Решено] Как получить размер массива на C?

(@nik_99)
New member

Подскажите, как можно программно узнать размер массива? Пробовал так:

unsigned int array[12];
int size = sizeof(array);

Но в переменной size получил не 12, а 48 (догадываюсь, что связано с тем, что unsigned int - это 4 байта).

Цитата
Создатель темы Размещено : 10.04.2023 14:28
Метки темы
Aveal
(@aveal)
Top level Admin

По поводу 48-ми все верно, значит на данной машине int - 4 байта, поэтому в результате получим 12 * 4 = 48. Теперь ближе к сути:

unsigned int array[12];
size_t arraySize = sizeof(array) / sizeof(array[0]);

Размер массива в байтах (48) делим на размер одного элемента (4), по итогу получаем 12. 

ОтветитьЦитата
Размещено : 10.04.2023 14:46
(@nik_99)
New member

@aveal Получается, что можно и так?

unsigned int array[12];
size_t arraySize = sizeof(array) / sizeof(int);

Я проверил, получилось 12 тоже.

ОтветитьЦитата
Создатель темы Размещено : 10.04.2023 15:14
Aveal
(@aveal)
Top level Admin
От: @nik_99

@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);
ОтветитьЦитата
Размещено : 10.04.2023 15:29
(@nik_99)
New member

Принято, спасибо за быстрый ответ )

ОтветитьЦитата
Создатель темы Размещено : 10.04.2023 17:18
Поделиться: