Возможный дубликат:
Как найти sizeof (указатель, указывающий на массив)
Я изучаю, как создать динамический массив на 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()
.