| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Передача структуры функции |
| Автор: AlexSm 16.3.2003, 19:38 |
| |
| Автор: Baa 16.3.2003, 21:22 |
| AlexSm, передай указатель на неё. |
| Автор: Step 18.3.2003, 04:58 |
| Baa а через тип структуры разве не получиться |
| Автор: Step 18.3.2003, 05:19 | ||
проверял- работает |
| Автор: DENNN 18.3.2003, 06:04 | ||
| Step В твоем случае передаеться в стек вся структура, затем вызывается подпрограмма которая ее отттуда забирает. В вариантеBaa в стек помещается только указатель. При больших размерах структуры работа программы может замедлится. Есть иакже третий вариант
|
| Автор: SETQ 18.3.2003, 06:19 | ||||
whooooops!... а что это за фишка?
может чего-то поменялось, а я и не знаю.... :) есть и четвёртый способ, раз уж на то пошло ;)))))))
не воспринимать как руководство к действию пожалуйста :)) |
| Автор: DENNN 18.3.2003, 20:22 |
| Не помню как правильно называется, что-то вроде ссылочной переменной |
| Автор: Nastya 18.3.2003, 20:27 | ||
Это передача параметров по ссылке (так модно передавть не только структуры, но и любые данные). Когда передается не значение переменной, а ссылка на нее. |
| Автор: SETQ 19.3.2003, 00:23 | ||||
так...
если вы имеете в виду ссылочные переменные, то, опять же по-моему, выглядеть это должно иначе
|
| Автор: -=Baa=- 19.3.2003, 17:50 |
| Есть еще много извращенных способов передачи в инт заносим адрес, а потом его юзаем как начало структуры. (тоже самое, что и по ссылке) |
| Автор: Paradox 19.3.2003, 17:59 | ||
наверное моЖно а если все-таки моДно, то мне кажется что передавать надо не так как модно, а так как удобно или практично |
| Автор: Alex101 19.3.2003, 18:07 | ||
Paradox прав - это намного практичнее. Передавать по значению удобно простые типы данных (int, char и т.д.), иначе проще передавать ссылку на них, я бы сказал даже, "лучше" - нет смысла запихивать в стек громоздкие данные - смысла тут действительно будет ноль, а вот торможение может появиться. Представьте себе, что лучше сделать - передать в функцию класс - какой-нибудь CEdit или указатель на него? |
| Автор: DENNN 19.3.2003, 21:03 | ||
Да все правильно. Малось не там & поставил А насчет стека, так ссылочная переменная для того и существует чтоб в сетк значению не запихивать. А насчет удобства, если ты кусок кода переделываешь в подпрограмму, то при использовании ссылочной переменной ничего менять не придется а для адреса выражение вида newvalue=a.name; надо заменять на newvalue=a->name; . Если кусок кода большой то и такой правки может быть достаточно много. Выгода: если захочешь потом из подпрограмы опять вернуть кусок кода то такие выражения обратно подправлять не нужно. Недостатки: на мой взгляд главный, что ссылочная переменная должна быть проинициализирована при создании, значет объявить ее членом класса не удастся, да и проверка на нулевой адрес (как при работе с указателем) некорректна. |
| Автор: Fantasist 20.3.2003, 01:19 | ||
Удастся, но нужно будет ее проинициализировать в списке инициализации конструктора. |
| Автор: brb 20.3.2003, 02:21 |
| Мне непонятно другое. Перед тем как решать задачу, я бы хотел знать, какие цели преследуются. Решений-то несколько. Например, если мне надо эти передаваемые параметры модифицировать и возвращать, то ни о каких других вариантах, как только через указатель(ссылку), не может быть и речи. Если это просто набор параметров, то тогда определяющими параметрами станут их число, скорость выполнения и удобство(простота) кода. Нету общего решения для общего случая. Извините. |
| Автор: DENNN 20.3.2003, 02:49 | ||
Так про любую задачу высказаться можно |
| Автор: Paradox 20.3.2003, 03:21 | ||
|
| Автор: Step 20.3.2003, 04:27 | ||
|
| Автор: Molnienosetz 22.3.2003, 00:34 | ||
Извините, что выпындрываюсь, но, кажется, правильно будет так: struct struct_name {...}; <...> ret_type my_func(struct_name &); <...> int main(void) { <...> struct_name MyStruct; <...> ret_type that_variable = my_func(MyStruct); <...> return 0; } ret_type my_func(struct_name &GetStruct) { <...> } |
| Автор: Molnienosetz 22.3.2003, 00:36 |
| Товарищи, а чё это я ШУСТРЫМ стал??!?!?!!!!!!!! |
| Автор: Step 22.3.2003, 00:46 | ||
|
| Автор: DENNN 23.3.2003, 18:40 | ||
Вчера попробовал- убрал конструктор по умолчанию, сделал конструктор с передачей ему ссылки в качестве параметра. Компилятор ругается |