C, Malloc () und Arraylänge [duplizieren]

Mögliche Duplikate:
So finden Sie die sizeof (ein Zeiger auf ein Array)

Ich lerne, wie man ein dynamisches Array in C erstellt, bin aber auf ein Problem gestoßen, das ich nicht herausfinden kann.

Wenn ich den Code verwende:

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

Ich bekomme die Ausgabe:

sizeof num = 40
sizeof num[0] = 4

Das ist es, was ich erwarten würde. Allerdings, wenn ich die Größe des Arrays wie 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]));

Dann bekomme ich die Ausgabe:

sizeof num = 8
sizeof num[0] = 4

Ich bin gespannt, warum die Größe des Arrays 40 ist, wenn ich die Methode mit fester Länge verwende, aber nicht, wenn ich sie verwendemalloc().

Antworten auf die Frage(4)

Ihre Antwort auf die Frage