Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Возврат из функции


Автор: Гость_Zorro 4.7.2004, 20:57
Подскажите плз, как организовать возврат массива из функции?
Типа ентого пишу:

Код

str2ar(AnsiString instr)
{
   AnsiString outstr[3];
   outstr[1]="sd";
   outstr[2]="sd2";
   outstr[3]="sd3";
   return([b]outstr[/b]);
}


а мне компилятор (builder) ругается...

Тут такая задача: строка - набор значений разделенных определенным символом, надо эти значения загнать в массив.
Может есть какая функция для реализации ентого? а?

Автор: LOL 4.7.2004, 21:31
Зачем передоввать в функцию instr если он в ней не используется?
Может быть instr это и есть массив который надо заполнить?
из функции достаточно вернуть одну ечейку массива, чтобы потом восстановить весь массив!!!

Автор: Гость_Zorro 4.7.2004, 22:06
Я написал ради примера.... хорошо, тогда так:

Код

str2ar(AnsiString instr)
{
  AnsiString outstr[3];
  ... // здесь идет код разделения строки на 3 части и загонения ее в массив
  return(outstr);
}


Я незнаю как возвратить строку или массив с помощью return - если тока целое. sad.gif

Автор: bel_nikita 5.7.2004, 00:33
Что за тип такой AnsiString? Борланда не знаю. Как хранятся данные в этом типе?
Вот, типа того. Я думаю знатоки борланда меня поправят wink.gif
Цитата
AnsiString* str2ar(AnsiString instr)
{
  AnsiString* outstr;
  outstr=new AnsiString[3];
  // здесь идет код разделения строки на 3 части и загонения ее в массив
  return outstr;
}

Под AnsiString я подразумеваю char.
Да-а, потом, главное не забыть сделать delete [] smile.gif

Автор: Leopard25 5.7.2004, 07:51
// описание
void Create(int A_MasPair[20][2]);

// вызов
int MasPair[20][2];
CreateMasPairNogID(MasPair);


// функция
void CPageTask::Create(int A_Mas[20][2])
{

Всё что сделаешь здесь с A_Mas[20][2] отразится на MasPair[20][2]

}

Автор: Олег М 5.7.2004, 08:57
Так тебя не чем устраивает
Код
void str2ar(AnsiString instr, AnsiString *outstr)
{
  outstr[1]="sd";
  outstr[2]="sd2";
  outstr[3]="sd3";
}

Автор: achmed 5.7.2004, 09:49
если пишешь на C++, то возвращать из функции то, что нужно обязательно удалить не есть хорошо, Олег М предложил неплохой вариант, но можно его обобщить:

template<class out>
void str2ar(AnsiString instr, out it)
{
 *(it++) = "sd"
*(it++) = "sd2"
*(it++) = "sd3"
}

вызов (возможны другие варианты)
#include <list>
#include <iterator>
using namespace std;

.....

list<AnsiString> l;
str2ar(anystr,back_insert_iterator<list<AnsiString>>(l));





Автор: Guest 6.7.2004, 02:15
ДА ВЫ ДАЛБАЕБЫ ВСЕ [censored 11] [censored 12] ПРОГРАМЕРЫ [censored 12]Ы

Автор: gepard 6.7.2004, 07:13
Сколько же идиотов на свете sad.gif
А вообще, зачем возвращать массив, когда можно сразу в него писать?
Код

#include <stdio.h>
#include <string.h>
void func(char chr[])
{
char* chr2;
chr2=&chr[0];
for (__int8 i=0;i<strlen(chr);i++)
 chr2[i]='1';
}
void main()
{
char chr[]={"Hello World!"};
printf("Before:%s\n", chr);
func(chr);
printf("After :%s\n", chr);
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)