Длина массива вычисляется по-разному при передаче в функции? - PullRequest
0 голосов
/ 20 марта 2020

Я действительно не понимаю, почему функция и расчет в основном не дают одинакового ответа.

Функция печатает 1, а расчет в основных печатных изданиях 8 - правильный размер:

#include <stdio.h>

void size(const int a[]) {
  printf("%i\n",sizeof(a) / sizeof(a[0]));
}

 int main(void) {
  int array[] = { 5, 2, 4, 6, 1, 7, 3, 3 };
  printf("%i\n", (sizeof(array) / sizeof(array[0])));
  size(array);
  return 0;
}

1 Ответ

2 голосов
/ 20 марта 2020

Вы получаете неверный размер внутри этой функции из-за распада массива .

Ваш массив становится указателем, когда вы передаете его функции, и sizeof(pointer) / sizeof(arr[0]) даст вам 1, потому что в ваша текущая конфигурация архитектуры, размер указателя составляет 4 байта, а размер целого также 4 байта.

Но это не тот случай, когда вы имеете дело с исходным массивом внутри своей основной функции, поэтому вы получите правильный вывод там.

...