Весь мозг поломал, перечитал все об указателях и так и не понял как сделать этот код работоспособным. Как прямо сказать циклу что я ему подсовываю именно массив (а то он ругается что не найдена функция begin)?
void func (int * a)
{
for (auto n : a) { std::cout << n; }
}
int main() {
int arr[] = { 4,7,3,4,7,8,9,0};
func(arr);
}
Ответ
Поскольку вы передаете указатель (да даже если бы вы передали массив без указания размера - все равно передался бы указатель), таким образом - никак. Указатель не несет в себе никакой информации, кроме адреса. func никак не может узнать, где конец массива.
Поскольку в вопросе именно range-based цикл, то тривиальную передачу указателя, количества элементов и обычный цикл не рассматриваем.
Но и тут можно выкрутиться - с помощью шаблонов:
template
int main() {
int arr[] = { 4,7,3,4,7,8,9,0};
func(arr);
}
Комментариев нет:
Отправить комментарий