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

Возможный дубликат:

Как найти sizeof (указатель на массив) I '

я учусь создавать динамический массив в 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)

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