Eventuali duplicati:
How to find the sizeof(a pointer pointing to an array)C, malloc() e lunghezza dell'array
sto imparando come creare un array dinamico in C, ma sono imbattuto in un problema che posso capisco.
Se uso il codice:
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]));
ottengo l'output:
sizeof num = 40
sizeof num[0] = 4
Questo è quello che mi aspetto che accada. Tuttavia, se mi malloc la dimensione della matrice come:
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]));
Allora ottengo l'output:
sizeof num = 8
sizeof num[0] = 4
Sono curioso di sapere il motivo per cui la dimensione della matrice è 40 quando uso il fisso metodo di lunghezza, ma non quando uso malloc()
.
'num' è puntatore a int nel secondo caso e la sua dimensione dipende dalla macchina, cioè per 32 bit è di 4 byte e per 64 bit è di 8 byte. Nel primo caso num non è puntatore, è' base indirizzo 'di matrice così' sizeof() 'indica la dimensione totale dell'array. . – krpra