размер массива в c

простой вопрос, который содержит ошибки меня. Допустим, у меня есть массив, определенный в main, например, так int arr [5] . Теперь, если я все еще внутри main и я установил int i = sizeof (arr) / sizeof (arr [0]) , тогда мне будет присвоено значение 5, но если я передаю массив как функцию параметр и проделать точно такой же расчет в этой функции, я получу другое число. Это почему? Сначала я подумал, что это потому, что в функции arr есть указатель, но, насколько мне известно, arr также является указателем внутри main!

Кроме того, если я делаю что-то очень похожее, только я инициализирую массив динамически, я получаю странные результаты:

int *arr = (int*) malloc(sizeof(int) * 5);
int length = sizeof(*arr) / sizeof(arr[0]);
printf("%d\n",length);

Здесь результат 1 . Есть идеи, почему? Заранее спасибо!

18
задан rdvdijk 25 September 2011 в 12:18
поделиться