В процессе разработки, заметил некорректную работу программы, вынес проблему в отдельный проект.
#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
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сначала вместо нуля выводил экспоненту, поставил в сout setprecision(1) выводит -00 как с этим бороться? И как вместо nan вывести "*"
Здесь я получаю данные с базы данных в мою модель и передаю их в Qml
печатает цифру в обратно порядке как исправить ?