В процессе разработки, заметил некорректную работу программы, вынес проблему в отдельный проект.
#include <iostream>
using namespace std;
int getSize(int arr[]) {
return sizeof(arr);
}
int main() {
int arr[] = { 1, 2, 3, 4 };
cout << getSize(arr) << endl; // Вывод: 8
cout << sizeof(arr) << endl; // Вывод: 16
return 0;
}
Вас вводит в заблуждение объявление функции int getSize(int arr[]). arr в нем является обычным указателем, а не массивом. Если хотите получить размер массива, то нужен шаблон, принимающий массив по ссылке:
template<typename T, ::std::size_t items_count> ::std::size_t
getSize(T ( & arr )[items_count])
{
return sizeof(arr);
}
online compiler
А вообще вместо С-style массивов следует использовать std::array.
для функции getSize имя вашего массива является указателем (ваша функция не знает какой массив вы ей передадите).
Поэтому выводится размер указателья.
В main() вы имеет определенный массив, и sizeof выдает размер всего массива;
При передаче в функцию int arr[] эквивалентно int *arr, поэтому ты получаешь размер указателя, а не размер массива.
Для Си++ можно сделать так: https://ideone.com/2v0qXE
template <int N> int getSize(int (&arr)[N]) {
return sizeof(arr);
}
Но вообще гораздо лучше в функцию передавать размер массива, а не пытаться его там вычислить. Ну и ещё для размеров правильнее использовать size_t, а не int.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости