Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149

Передача массива в функцию и range-based цикл

09.01.2017, 09:10. Показов 2255. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Весь мозг поломал, перечитал все об указателях и так и не понял как сделать этот код работоспособным. Как прямо сказать циклу что я ему подсовываю именно массив (а то он ругается что не найдена функция begin)?
C++
1
2
3
4
5
6
7
8
9
10
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);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2017, 09:10
Ответы с готовыми решениями:

Range-based for
Дана конструкция вида for(auto a:some_func()). Гарантирует ли стандарт что some_func будет вызвано один раз или это зависит от компилятора?

Range-based for
Почему не работает данный цикл с динамически выделенным массивом? Подозреваю, что из-за фрагментированности кучи... но адресная...

Range-based for
Пример кода: int my_array = {1, 2, 3, 4, 5}; for(int &amp;x : my_array) { x *= 2; } Возникли вопросы: 1. &quot;х&quot;...

29
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.01.2017, 11:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _stanislav Посмотреть сообщение
почему компилятор не в состоянии вывести размер массива без участия шаблона.
В таком случае любая функция с параметром-массивом была бы неявно шаблонной.
1
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
09.01.2017, 11:59
Цитата Сообщение от _stanislav Посмотреть сообщение
почему такой код не работает
Ну тогда сразу вопрос кодом.
C++
1
2
3
4
void func(int (&a)[])
{
    std::cout << sizeof(a);
}
какой размер должен быть?
Заметьте, оно должно вычисляться на этапе компиляции.
А значит для каждого массива должна быть своя функция.
А значит их нужно генерировать во время компиляции.
А для этого как раз предназначены шаблоны.
Как вариант еще:
C++
1
2
3
4
void func(auto &a)
{
    for (auto n : a) { std::cout << n << " "; }
}
но, по сути, тот же шаблон, только пудрой присыпанный.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
09.01.2017, 12:02
Croessmah, DrOffset, получается, размер массива влияет на сигнатуру функции?
0
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149
09.01.2017, 12:31  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Как вариант еще:
C++
1
2
3
4
void func(auto &a)
{
    for (auto n : a) { std::cout << n << " "; }
}
но, по сути, тот же шаблон, только пудрой присыпанный.
VC 2015 пишет ошибку в параметрах func
"Тип auto здесь не разрешен"
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.01.2017, 12:43
Цитата Сообщение от _stanislav Посмотреть сообщение
получается, размер массива влияет на сигнатуру функции?
Конечно. Размер массива - часть типа "массив". Тип в параметре функции влияет на ее сигнатуру. За исключением момента с массивами в качестве параметра функции по значению - там у нас всегда подразумевается указатель, по историческим причинам.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
09.01.2017, 20:21
используя auto нужно помнить, то что писать в бестиповом стиле большие программы плохо.

Добавлено через 7 часов 20 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Ну тогда сразу вопрос кодом.
sizeof вычисляется компилятором или в рантайме?, думаю что компилятором потому что код
C++
1
int size = sizeof(int);
в асм листинге
Assembler
1
mov         dword ptr [size],4
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
09.01.2017, 20:23
Цитата Сообщение от _stanislav Посмотреть сообщение
sizeof вычисляется компилятором или в рантайме?
эм...
Цитата Сообщение от Croessmah Посмотреть сообщение
Заметьте, оно должно вычисляться на этапе компиляции.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
09.01.2017, 20:27
Цитата Сообщение от Croessmah Посмотреть сообщение
Заметьте, оно должно вычисляться на этапе компиляции.
"оно" не конкретно
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
09.01.2017, 20:30
Цитата Сообщение от _stanislav Посмотреть сообщение
"оно" не конкретно
Речь же в вопросе о sizeof.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
09.01.2017, 20:39
Croessmah, все понятно, осталось только переварить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2017, 20:39

range-based for не работает
#include &lt;iostream&gt; #include &lt;vector&gt; int main() { std::vector&lt;int&gt; v(30); for (auto z : v) { std::cout&lt;&lt;z&lt;&lt;std::endl; ...

Range-based for trouble
Доброго времени суток, уважаемые форумчане! У меня возникла небольшая проблема с данной штукой. Почему такой вариант работает, int...

A range-based for statement
я вот чё то не понимаю - когда вызываем оператор delete для указателя на массив, он каким то образом узнаёт его размер и всё грамотно...

загадки range-based
если поставить auto &amp;it - будет тоже самое - почему?// initializer_list::begin/end #include &lt;iostream&gt; // std::cout #include...

Непонятки с range-based for!
Доброе время суток! Запутался с range-based циклами! Вообщем код inline string ChecTypeFiles(std::string const &amp; Names) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru