C, Malloc () i długość tablicy [duplikat]

Możliwy duplikat:
Jak znaleźć sizeof (wskaźnik wskazujący na tablicę)

Uczę się, jak tworzyć dynamiczną tablicę w C, ale natknąłem się na problem, którego nie mogę zrozumieć.

Jeśli korzystam z kodu:

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]));

Dostaję dane wyjściowe:

sizeof num = 40
sizeof num[0] = 4

Tego właśnie się spodziewam. Jeśli jednak mam rozmiar tablicy taki jak:

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]));

Następnie otrzymuję dane wyjściowe:

sizeof num = 8
sizeof num[0] = 4

Ciekaw jestem, dlaczego rozmiar tablicy wynosi 40, gdy używam metody stałej długości, ale nie, gdy używammalloc().

questionAnswers(4)

yourAnswerToTheQuestion