Форум программистов, компьютерный форум CyberForum.ru

Функция должна вернуть 4 параметра - C++

Восстановить пароль Регистрация
 
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 19:27     Функция должна вернуть 4 параметра #1
Здравствуйте. Что то я совсем подзабыл основы. Есть функция в которую я передаю 4 параметра в виде одного масива int a[4], а возвращает одно значение, теперь мне надо производить обратные действия т.е. отдаю один параметр и нужно получить четыре. Как это можно осуществить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 19:27     Функция должна вернуть 4 параметра
Посмотрите здесь:

Почему функция не может вернуть массив, но может вернуть структуру содержащий массив? C++
C++ Есть функция. Надо вернуть значение
C++ Функция, которая получает два параметра и возвращает результат деления первого параметра на второй
Функция должна вычислять рандомное значение от a до b C++
C++ Функция в качестве параметра
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.12.2012, 19:31     Функция должна вернуть 4 параметра #2
Цитата Сообщение от doncelab Посмотреть сообщение
я передаю 4 параметра
Итого - один параметр, на самом деле.
Цитата Сообщение от doncelab Посмотреть сообщение
а возвращает одно значение
Ссылка, указатель, любой контейнер.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 19:38     Функция должна вернуть 4 параметра #3
doncelab, структуру можно свою сделать, если параметры разного типа.

Добавлено через 30 секунд
Цитата Сообщение от Vourhey Посмотреть сообщение
Ссылка,
Поясните.
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 19:39  [ТС]     Функция должна вернуть 4 параметра #4
да нее, я отдаю четыре int и возврящаю один double, и нужно наоборот
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.12.2012, 19:45     Функция должна вернуть 4 параметра #5
Цитата Сообщение от go Посмотреть сообщение
Поясните.
Что не понятно?
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.12.2012, 19:47     Функция должна вернуть 4 параметра #6
Функции в C++ могут ничего не возвращать, либо возвращать один объект. Когда надо возвращать больше одного объекта, есть 2 подхода:

1. Возвращать структуру (например, если вам нужно возвратить int и double, то вы можете создать структуру с полями int и double, заполнить ее и возвратить). Как частный случай, можно возвращать контейнер объектов.

2. Передавать объекты в функцию по ссылке. Тогда измененный внутри функции параметр также будет изменен и в блоке, откуда функция была вызвана.
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 19:50  [ТС]     Функция должна вернуть 4 параметра #7
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Функции в C++ могут ничего не возвращать, либо возвращать один объект. Когда надо возвращать больше одного объекта, есть 2 подхода:

1. Возвращать структуру (например, если вам нужно возвратить int и double, то вы можете создать структуру с полями int и double, заполнить ее и возвратить). Как частный случай, можно возвращать контейнер объектов.

2. Передавать объекты в функцию по ссылке. Тогда измененный внутри функции параметр также будет изменен и в блоке, откуда функция была вызвана.
Можно пример для второго варианта?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 19:52     Функция должна вернуть 4 параметра #8
Цитата Сообщение от Vourhey Посмотреть сообщение
Что не понятно?
Вот этот вариант
Цитата Сообщение от Vourhey Посмотреть сообщение
Ссылка, указатель, любой контейнер.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.12.2012, 19:55     Функция должна вернуть 4 параметра #9
C++
1
void a(int (&b)[4])
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 20:05  [ТС]     Функция должна вернуть 4 параметра #10
объявление
C++ (Qt)
1
void DoubleToInt(double a, unsigned int b[4]);
функция
C++ (Qt)
1
2
3
4
void DoubleToInt(double a, unsigned int b[4])
{
....
}
вызов
C++ (Qt)
1
DoubleToInt(aa, &bb[4]);
но в функции видится только b[0], а остальные нет
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 20:06     Функция должна вернуть 4 параметра #11
Цитата Сообщение от doncelab Посмотреть сообщение
вызов
Плохо вызываете.
используйте вариант Vourhey.
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 20:11  [ТС]     Функция должна вернуть 4 параметра #12
попробовал такой вариант
C
1
DoubleToInt(aa, (&bb)[4]);
видится только b[0]
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 20:16     Функция должна вернуть 4 параметра #13
Цитата Сообщение от doncelab Посмотреть сообщение
DoubleToInt(aa, (&bb)[4])
Вызов
C++
1
DoubleToInt(aa, bb)
Прототип, думаю, сами напишете.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.12.2012, 20:19     Функция должна вернуть 4 параметра #14
Vourhey, ссылка в вашем коде не несет никакой смысловой нагрузки, елементы массива можно изменять и без нее. Более того, я не смог придумать ни одного примера использования вашей конструкции, так как у вас b не является lvalue, и присвоить ей другой масив не представляется возможным.

doncelab, я думаю, такой код вам подойдет:
C++
1
2
3
4
void foo(double a, int b[4])
{
    // ...
}
Здесь елементы массива b останутся измененными после выхода из функции. Это происходит потому, что массив указывает на свои елементы, и при передаче массива в функцию передаются указатели на эти елементы (если быть точнее, указатель на первый елемент), а сами объекты не копируются, как, например, происходит с переменной a. Для того, чтобы запретить изменение елементов массива, функцию стоит объявить как
C++
1
void foo(double a, const int b[4])
Да, еще я заметил, что я не привел пример с передачей объекта в функцию по ссылке. В функции foo переменная a передается по значению, т.е. в теле функции не используется та переменная, с которой фукнция вызывалась, а используется ее копия. Синтаксис передачи елемента по значению такой:
void foo(double &a);
Еще небольшой пример для понимания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void foo(int a)
{
    a = 7;
}
 
void bar(int &a)
{
    a = 7;
}
 
int main()
{
    int a = 5;
    std::cout<<"a = "<<a<<'\n'; // a = 5
    foo(a);
    std::cout<<"a = "<<a<<'\n'; // a = 5
    bar(a);
    std::cout<<"a = "<<a<<'\n'; // a = 7
}
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 20:38  [ТС]     Функция должна вернуть 4 параметра #15
Огромное спасибо все получилось.
gray_fox
06.12.2012, 21:08
  #16

Не по теме:

Цитата Сообщение от PraZuBeR Посмотреть сообщение
Более того, я не смог придумать ни одного примера использования вашей конструкции, так как у вас b не является lvalue, и присвоить ей другой масив не представляется возможным.
Если честно, я не понял, чем плохи ссылки на массив?

prazuber
06.12.2012, 21:13
  #17

Не по теме:

gray_fox, у меня противоположная ситуация - я не понял, чем ссылка на массив хороша. Лично я не смог придумать ни одного варианта ее использования. Поэтому ее в некоторой степени можно считать плохой, потому что она затрудняет чтение кода. Буду рад увидеть полезное применение ссылки на массив.

gray_fox
06.12.2012, 21:25
  #18

Не по теме:

PraZuBeR, ну например такое с сылкой на массив в качестве параметра ф-ии просто не скомпилируется:

C++
1
2
3
4
5
6
7
8
9
void f(int vals[4]) {  // "обманчивая" 4-ка
    vals[3] = -4;    // oops
}
 
int main() {
    int vals[] = {1, 2, 3};
    f(vals);
    f(0);       // oops
}

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 21:31     Функция должна вернуть 4 параметра
Еще ссылки по теме:

Шаблон принимает два типовых параметра. Если параметры - одни и те же типы, вернуть true C++
Вернуть 2 параметра из функции C++
Функция func должна вернуть количества элементов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
prazuber
06.12.2012, 21:31     Функция должна вернуть 4 параметра
  #19

Не по теме:

gray_fox, спасибо, не знал про эту особенность. Правда теперь мне немного грустно, ведь придется теперь везде по ссылке массив передавать, что немного ухудшит читаемость. Но такие ошибки лучше ловить на этапе компиляции.

Yandex
Объявления
06.12.2012, 21:31     Функция должна вернуть 4 параметра
Ответ Создать тему

Метки
вернуть, должна, параметра, функция
Опции темы

Текущее время: 15:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru