Требуется ли стандарту C, чтобы размер массива из n элементов был в n раз больше размера элемента, либо явным выражением, либо строгим логическим выводом из его требований?
Например, может ли int (*x)[5] = malloc(5 * sizeof **x);
не запрашивать достаточное пространство для массива из пяти int
?
C 2011 [N1570] 6.5.3.4 7 показан пример вычисления количества элементов в массиве как sizeof array / sizeof array[0]
. Однако примеры не являются нормативной частью стандарта (в параграфе 8 форварда).
6.2.5 20 говорит, что тип массива описывает смежно распределенный непустой набор объектов с определенным типом, но не говорит о полной требуемой памяти.
Это вопрос только на языке-юристе; фактические реализации не имеют значения. (Чтобы успокоить тех, кто хочет конкретных примеров, предположите реализацию C, которая требует дополнительного управления памятью для больших массивов, поэтому для создания массива требуется создание некоторых дополнительных данных для управления памятью.)