11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
|
||||||
1 | ||||||
Возвращение массива из функции23.08.2009, 09:20. Показов 51543. Ответов 37
Метки нет (Все метки)
Нужно вернуть массив типа int из функции
Как я понимаю сделать это можно только с помощью указателей У меня это получилось но так как везде пишут что указатели очень сложная тема решил узнать правильно ли я все сделал
1)Обязательно ли присваивать значения каждому элементу массива который передаеться в функцию и потом изменяеться с помощью указателей ? 2) Как я понимаю ссылки вообще никак нельзя использовать для возвращения массива из функции ?
2
|
23.08.2009, 09:20 | |
Ответы с готовыми решениями:
37
Как реализовать передачу массива в функцию и возвращение массива из функции? Возвращение массива из функции Возвращение массива из функции Возвращение двумерного массива из функции |
27.08.2009, 00:02 | 21 | ||||||||||
Бывают вот такие:
Бывают такие:
Дико подозреваю, что для начинающего нужен простой вариант на Си, а не изыски с шаблонами. ПРавда это был ответ на "других не бывает".
0
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
27.08.2009, 00:03 | 22 |
так правильней.
Rififi, ты видишь что человек только учит С++? Скажи мне? Ты начинал свое обучение с шаблонов функций?
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
27.08.2009, 00:11 | 24 |
Monte-Cristo,
Rififi, ты видишь что человек только учит С++? собстна, Evg всё уже сказал - это был ответ на "других не бывает" Бывают вот такие: int a[n]; Только в C99, но в принципе ты прав. Бывают такие: int *a = malloc (...); А это и не массив ни разу, а указатель на целое. Скажи мне? Ты начинал свое обучение с шаблонов функций? Неа. С рассматривания картинок. DDD
0
|
27.08.2009, 00:14 | 25 |
Согласен, но такую конструкцию многие называют "динамически выделяемый массив". При этом такой термин имеет право на жизнь хотя бы потому, что разыменовывание указателя можно осуществлять через операции декомпозиции массива (квадратные скобки)
0
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
27.08.2009, 00:21 | 26 |
Не хотел дурить парню голову. Все должно постигаться своевременно и без спешки. Просто сужу по собственному опыту: когда я впервые увидел шаблоны я был в диком удивлении и пытался понять что это за нелепость?
ну это естевственно.. с архитектурной точки зрения.. но в учебниках, да как и большинство преподователей, упоминается это как динамическое создание массивов.
0
|
27.08.2009, 00:21 | 27 |
nill, теперь вы поняли, что главная проблема здесь - не выйти за границы массива. все просто.
а всякие "штучки" оставьте на потом, этих штучек - пруд пруди, и никто не знает все. чем меньше вы их будете применять без меры, тем лучше будет ваша жизнь.
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
27.08.2009, 00:33 | 28 |
Evg,
Rififi, Monte-Cristo, а покажите, как этой хреновиной поьзоваться. А то я в Си++ не особо в простейшем случае, чтобы просто подсчитать длинну статического массива (и только его, т.к. на указателях эта функция выдаст ошибку времени компиляции) int arr[10]; const size_t N = array_count(arr); // N = 10 но вот такая конструкция уже не пройдёт: int arr2[array_size(arr)]; ибо array_size - это не константа времени компиляции чтобы заставить строчку с arr2 компилироваться, нужно преобразовать исходный массив в массив однобайтовых элементов (и тогда его размер == его sizeof), а также учесть тот замечательный факт, что sizeof не выполняет вызов функции - размер вычисляется в compile-time. тогда: template <typename T, const size_t N> char (&array_size(const T (&)[N]))[N]; int arr[sizeof(array_size(arr))]; выглядит страшновато, ну а кому щас легко? :green:
0
|
27.08.2009, 08:45 | 29 |
А главное - нафига вот так всё сложно. Сделать макрос через sizoef'ы и не париться. Хотя я понимаю, что использование макросов для многих считается непацанским стилем и вообще несовместимым с концепцией Си++. Но у меня нет практики работы с Си++, а когда что-то пытался сделать - миллион раз казалось плюнуть на эту концепцию и сделать по простому
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
27.08.2009, 10:39 | 31 |
esli by eto esh4e i kompirirovalos' - zeny b emu ne bylo
esli by vse polzovalis' normalnymi kompilyatorami a ne kakimi-to krivul'kami, bylo by esche kruche.
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
27.08.2009, 11:02 | 33 |
Evg,
А главное - нафига вот так всё сложно. Сделать макрос через sizoef'ы и не париться. Это только для тех, кто предпочитает создавать более безопасный код. для каких-нибудь пользователей продукции Борланд (aka формошлёпщиков) можно действительно не париться
0
|
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
|
27.08.2009, 11:07 | 34 |
Если нельзя опеределить размер динамического массива, то как же delete [] узнает сколько элементов удалять?
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
27.08.2009, 11:10 | 35 |
HIMen,
потому что оно использует свои внутренние механизны, относящиеся к контретной реализации конкретного менеджнра памяти, недоступные обычному пользователю.
0
|
27.08.2009, 11:11 | 36 |
Чем же такой вариант более безопасен, чем вариант с sizeof?
Добавлено через 1 минуту new и delete по своей сути внутри себя работают через malloc и free. malloc при выделении памяти реально выделает немного больше и дополнительно записывает информацию о количестве выделенной памяти. free этим пользуется
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
27.08.2009, 11:16 | 37 |
Evg,
Чем же такой вариант более безопасен, чем вариант с sizeof? а вот чем: int* arr = new int[10](); const size_t N1 = sizeof(arr) / sizeof(arr[0]); const size_t N2 = sizeof(array_size(arr)); второе - не скомпилируется.
1
|
27.08.2009, 11:17 | 38 |
Чорт, об этом не подумал
Хотя тут скорее из разряда кривые руки, но безопаснее - факт
0
|
27.08.2009, 11:17 | |
27.08.2009, 11:17 | |
Помогаю со студенческими работами здесь
38
Возвращение из функции значения массива Возвращение двумерного массива из функции Возвращение многомерного массива из функции Возвращение массива из функции-шаблона Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |