У меня есть следующие коды:
main() {
int array[5] = {3,6,9,-8,1};
printf("the size of the array is %d\n", sizeof(array));
printf("the address of array is %p\n", array);
printf("the address of array is %p\n", &array);
int * x = array;
printf("the address of x is %p\n", x);
printf("the size of x is %d\n", sizeof(x));
}
Выходной сигнал
the size of the array is 20
the address of array is 0x7fff02309560
the address of array is 0x7fff02309560
the address of x is 0x7fff02309560
the size of x is 8
Я знаю, что переменная array
будет отображаться как указатель на первый элемент массива, поэтому я понимаю, что размер x равен 8. Но я не знаю, почему размер массива равен 20. Разве это не должно быть 8 (в 64-разрядной машине)?
Кроме того, как программа знает, что ей 20? Насколько я знаю в C, он не сохраняет количество элементов. Откуда sizeof(array)
и sizeof(x)
разные? Я отслеживал несколько сообщений, относящихся к распаду массива, но не знаю об этой проблеме.