![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
GrAndrey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.7.2003 Репутация: нет Всего: 1 |
Функции в C++ не возвращают массивы.
Как можно наиболее оптимально и красиво добиться того-же эффекта? |
|||
|
||||
Waters |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.11.2003 Репутация: нет Всего: нет |
Использовать STL.
wbr. |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Зачем, если не секрет, возвращать массив данных? Есть куча способов получить обработанный массив, например передать его адрес одним из параметров или, если он у тебя создается динамически, вернуть его адрес.
|
|||
|
||||
GrAndrey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 2.7.2003 Репутация: нет Всего: 1 |
Сейчас я передаю в функцию указатель на объект, полю которого и присваиваются результаты. Но мне это не вполне нравится.
|
|||
|
||||
NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Можно массив использовать как глобальный, а функцией его только изменять.
|
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
а что значит "оптимально"? если программа несложная, должна занимать мало места и быстро работать, то, конечно, лучше передавать указатель на какую-то область памяти и потом ее заполнять. если программа довольно сложная, имеет большую объектную модель, то в этом случае, действительно, лучше использовать что-нибдуь вроде STL
ну так можно передавать, например, указатель на это поле но вообще без описания конкретной задачи на такие вопросы сложно ответить... -------------------- qqq |
||||
|
|||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Можно внутри процедуры выделить память (malloc, virtualalloc, etc) и верунть указатель на эту память, только потом не забыть ее вернуть. Кажется, в методе закрытия (я ничего не понимаю в си++) можно указать закрыть всю выделенную память.
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
__vi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 301 Регистрация: 21.1.2004 Репутация: нет Всего: -1 |
Возвращай указатель
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Освободить выделенный блок памяти можно только по указателю на него, и только с помощью парной функции к той, какой память была выделена (речь идёт о new/delete, malloc/free, VirtualAlloc/VirtualFree). Сразу всю выделенную память освободить одной функцией нельзя, если конечно не имеется ввиду какой-то умный сторонний движок по управлению памятью. -------------------- ![]() |
|||
|
||||
mi49.Ok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 14.12.2003 Где: Irk Репутация: нет Всего: 1 |
Мне как то такая хрень понадобилась, я тогда писал преобразователь int'а в char. Я решил её так(наверно глупо):
|
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Нет, тут возвращается элемент массива, а ему нужен массив. Тип функции должен быть, например char* А возвращать надо сам массив (по имени). -------------------- С уважением, А. Фролов. |
|||
|
||||
mi49.Ok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 14.12.2003 Где: Irk Репутация: нет Всего: 1 |
Так нет, смысл в том, что делается цикл и в нём массиву(в который надо занести значение другого массива) возвращается соответствующее значение массива(из которого надо взять значение).
|
|||
|
||||
shedon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
lol, большего извращения не видел - ![]() -------------------- Programming is like sex: One mistake and you have to support it your lifetime |
|||
|
||||
mi49.Ok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 14.12.2003 Где: Irk Репутация: нет Всего: 1 |
А вообще, когда ты передаёшь в функцию массив, то передаётся адрес на первый бит массива => можно изменять массив в функции и массив, который ты передавал в функцию, тоже будет соответственно изменяться. Но надо обращаться на битам, в цикл запихать не получиться. Это я сам проверил.
|
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
А приче здесь биты ![]() не на бит, а на элемент точнее адрес. чтобы адресация по-битная была, токого я еще не видел да и вообще зачем давать совет, если сам не знаешь, что советуешь То GrAndrey а зачем так извращаться? ![]() Для чего тебе это надо? Я думаю это недороботка программы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |