Вы должны понимать разницу между статическими и динамическими массивами.Статические массивы являются типами типа int
, float
, double
и т. Д. Они различны.Четный
int a[10];
имеет тип, отличный от
int b[11];
Во время компиляции число элементов в статических массивах известно, а оператор sizeof
возвращает количество байтов, которые они занимают.
С указателями, которые были инициализированы, либо для указания на некоторую переменную, либо на выделенную память, во время выполнения будет очевидно, куда они указывают, и компилятор не может определить, что будетразмер этого массива в будущем.Поэтому указатель sizeof
дает 4 (или 8 в 64-битных системах, например).
Обратите внимание, что оператор sizeof
работает во время компиляции, а не во время выполнения.
Если вам нужно узнать размер выделенной памяти (через malloc
), у вас нет выбора, кроме как сохранить размер массива в другой переменной, например, сразу после того, как вы сделали malloc
.