на картинку видно что передан только первый элемент массива, но почему.
#include <iostream>
using namespace std;
template <class T>
T arr_size(T arr[]) {
return sizeof(arr)/sizeof(T);
}
int main()
{
int nums[]{9, 23, 54, 23};
cout << arr_size<int>(new int[4]{7,34,54,14});
return 0;
}
Да потому что несмотря на вашу инициализацию
new int[4]{7,34,54,14}
вы получаете и передаете в шаблон указатель int*. Поскольку в шаблон вы передаете массив по значению, тип низводится до указателя, и может принять ваш int* без проблем. Именно по этой причине (из-за низведения) даже если вы передадите в шаблонную функцию ваш nums - результат будет тем же.
У вас может сработать - для массива nums, не для new int... - вот такой шаблон:
template <class T, int N>
T arr_size(T (&arr)[N]) {
return sizeof(arr)/sizeof(T); // А еще лучше - return N;
}
Не надо судить о поведении языка программирования по поведению GUI в среде разработки.
В функцию передается указатель на начало массива. Через этот указатель вы спокойно увидите все элементы массива. Среда разработки на вашем скриншоте показала вам только тот элемент, на который непосредственно указывает ваш указатель, т.е. самый первый. Это совсем не означает, что остальные куда-то пропали.
В отладчике Visual Studio, чтобы увидеть несколько элементов массива через указатель, следует указывать, сколько именно элементов массива вы хотите увидеть. Это делается через синтаксис arr, 4 или arr, [4] в окнах Watch, Quick Watch и т.п.
Отдельно стоит заметить, что попытка использовать трюк с делением sizeof внутри вашей функции обречена на провал. Этот трюк работает только с массивами. У вас же внутри функции есть только указатель.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости