0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 23
|
|
1 | |
Как передать функции массив в качестве аргумента?23.04.2012, 17:19. Показов 125631. Ответов 96
Метки нет (Все метки)
Всем привет! Подскажите, как передать функции массив в качестве аргумента? И как сделать, чтобы функция возвращала массив?
0
|
23.04.2012, 17:19 | |
Ответы с готовыми решениями:
96
Как в качестве аргумента функции передать массив? Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) Как передать функции указатель на функцию в качестве аргумента? Нюансы работы с массивами: как правильно передать массив в функцию в качестве аргумента? |
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 8
|
|
01.03.2019, 11:49 | 22 |
0
|
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 8
|
|||||||||||
01.03.2019, 12:31 | 24 | ||||||||||
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||
01.03.2019, 12:39 | 25 | |||||
Это часть конструкции, той же что и задана в параметре
T (&arr)[N] , только здесь в качестве "возвращающего типа".Проверить себя можно так:
1
|
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 8
|
|
10.03.2019, 14:59 | 26 |
Это, если я не ошибаюсь, использование указателей?
Для меня это только недавно открытая тема (указатели) и оператор "->" является пока что тайной. Но спасибо, буду знать что есть ещё один способ возвратить массив из функции.
0
|
1536 / 456 / 101
Регистрация: 17.05.2015
Сообщений: 1,424
|
||||||||||||||||||||||||||
10.03.2019, 17:19 | 27 | |||||||||||||||||||||||||
Ошибаетесь)
Как может выглядеть функция, которая возвращает int ?
float ?
Как может выглядеть функция, которая возвращает int ?
float ?
Стрелочка -> после функции указывает компилятору,какой тип данных должна вернуть функция. Здесь:
-> указывает компилятору, что функция должна вернуть такой же тип данных, как у переменной arr Причем, тип переменной arr - ссылка на массив.Значит функция должна вернуть точно такую же ссылку на массив. Из функции нельзя вернуть массив. Можно вернуть указатель на массив, или на первый элемент, или по ссылкам. Можно вернуть массив по значению в составе агрегирующей структуры. Но нельзя вернуть сам массив. Или как ещё говорят: нельзя вернуть массив по значению
1
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
10.03.2019, 18:53 | 28 |
0
|
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 8
|
|
12.03.2019, 19:43 | 29 |
Спасибо огромное!
Но вот ещё один вопрос: как можно передать в функцию массив string? Желательно в шаблонную, возможно для этого уже существуют решения из STL. Проблема, как я понял, в том, что при попытке запихнуть подобный массив в шаблонную функцию, <size_t N> не может правильно определиться.
0
|
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 8
|
|
03.04.2019, 09:24 | 30 |
Всё, разобрался, просто делаешь контейнер с типом string (vector<string>) и передаешь в функцию.
0
|
05.05.2019, 10:22 | 31 | |||||
а что это за декларирование без запятой ?
выдает ошибку что нехватает запятой
0
|
05.05.2019, 13:20 | 33 |
Croessmah, пытаюсь понять что это такое
type (var1)[var2] var2==N макрос т.е. по сути переменная int может быть?. почему именно в квадратных скобках ? var1==&arr. почему именно в круглых скобках ? только ссылка или любая int переменная может быть ? обе переменные одного типа должны быть? любого типа можно? Добавлено через 3 минуты так же непонятно зачем вся эта эпопея с передачей или не передачей второго аргумента как размер массива, если можем просто передать массив и внутри функции посчитать его размер (кто count-ом любит, кто sizeof и тд), или это не круто или неправильно, или почему не считают его размер внутри функции?
0
|
Неэпический
|
|||||||||||
05.05.2019, 13:30 | 34 | ||||||||||
Начнем с простого:
type (&arr)[10] - ссылка на массив из 10 элементов типа type
arr - ссылка на массив из N элементов типа T.При передаче в данную функцию массива, параметры шаблона N и T будут выведены компилятором на основе аргумента функции.
0
|
18.07.2019, 16:24 | 36 |
друзья растолкуйте плиз пару моментов
1. зачем там class когда по идее должно быть typename ? и если заменить оно также работает2. когда у нас ссылка на массив, мы обязаны указать размер, например void foo(int (&a)[5]) . N это size_t но если пишу как в цитате void foo(int (&a)[size_t]) получаю кучу ошибок. как можно исправить ? развернуть так сказать тимплейт в обычную функцию
0
|
Неэпический
|
||||||
18.07.2019, 16:27 | 37 | |||||
И так и так можно. Разница только в количестве писанины.
N - Это не тип size_t, а значение типа size_t Под конкретное значение:
0
|
18.07.2019, 16:48 | 38 | ||||||||||
это фича тимплейта или можно сделать просто функцию в которой размер (N) тоже будет выводится автоматически ?
Добавлено через 16 минут я имею ввиду, вот упростим наш тимплейт до такого вида
это так только в тимплейте можно или я могу обычную функцию написать, с авто подсчётом вроде
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
||||||
18.07.2019, 17:08 | 40 | |||||
Обычную - не сможешь. Потому что для обычной функции тебе придётся указать
А шаблонные функции - это не одна функция, а целый набор, который генерируется для каждого типа массива свой собственный (т.е. если у тебя вызывается для массивов с размерами 10, 20 и 50, то шаблонная функция инстанцируется тоже 3 раза, для каждого из размеров получится своя собственная "функция", где это число будет везде подставлено)
2
|
18.07.2019, 17:08 | |
18.07.2019, 17:08 | |
Помогаю со студенческими работами здесь
40
Передать std::vector в качестве аргумента функции Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив? Как передать функцию в качестве аргумента? Передача функции в качестве аргумента массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |