C, Malloc () и длина массива [дубликаты]

Возможный дубликат:
Как найти sizeof (указатель на массив)

Я учусь создавать динамический массив в C, но столкнулся с проблемой, которую не могу понять.

Если я использую код:

int num[10];
for (int i = 0; i < 10; i++) {
    num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));

Я получаю вывод:

sizeof num = 40
sizeof num[0] = 4

Это то, что я ожидал бы случиться. Однако, если я malloc размер массива, как:

int *num;
num = malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++) {
    num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));

Тогда я получаю вывод:

sizeof num = 8
sizeof num[0] = 4

Мне любопытно узнать, почему размер массива равен 40, когда я использую метод фиксированной длины, а не когда я используюmalloc().

Ответы на вопрос(4)

Ваш ответ на вопрос