C, Malloc () e comprimento da matriz [duplicado]
Duplicata Possível:
Como encontrar o sizeof (um ponteiro apontando para uma matriz)
Estou aprendendo a criar um array dinâmico em C, mas me deparei com um problema que não consigo entender.
Se eu usar o código:
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]));
Eu obtenho a saída:
sizeof num = 40
sizeof num[0] = 4
Isso é o que eu esperaria que acontecesse. No entanto, se eu malloc o tamanho da matriz como:
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]));
Então eu recebo a saída:
sizeof num = 8
sizeof num[0] = 4
Estou curioso para saber porque o tamanho da matriz é 40 quando eu uso o método de comprimento fixo, mas não quando eu usomalloc()
.