С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
#1

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

06.12.2012, 19:27. Просмотров 1111. Ответов 18

Здравствуйте. Что то я совсем подзабыл основы. Есть функция в которую я передаю 4 параметра в виде одного масива int a[4], а возвращает одно значение, теперь мне надо производить обратные действия т.е. отдаю один параметр и нужно получить четыре. Как это можно осуществить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 19:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция должна вернуть 4 параметра (C++):

Функция func должна вернуть количества элементов - C++
Написать реализацию перегрузки функции int func(int * arr, int lenght) int func(double * arr, int length) Функция func должна...

Функция, которая получает два параметра и возвращает результат деления первого параметра на второй - C++
Тут такая задача: написать функцию, которая получает два параметра тип unsigned short int и возвращает результат деления первого параметра...

Вернуть 2 параметра из функции - C++
Доброе время суток. Объясните, пожалуйста как вернуть 2 параметра из функции? Очень желательно на таком примере - Написать функцию...

Шаблон принимает два типовых параметра. Если параметры - одни и те же типы, вернуть true - C++
Помогите с задачей. Реализовать простой шаблон SameType. Этот шаблон не содержит никаких методов, а только одно статическое константное...

Почему функция не может вернуть массив, но может вернуть структуру содержащий массив? - C++
Почему функция не может вернуть массив, но может вернуть структуру содержащую массив? Согласитесь что это некоторое несовершенство языка...

Функция должна вычислять рандомное значение от a до b - C++
Создать 2 функции, первая должна вычислять рандомное значение от a до b( a и b мы должны ввести сами),это значение должно выводится в...

18
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
06.12.2012, 19:31 #2
Цитата Сообщение от doncelab Посмотреть сообщение
я передаю 4 параметра
Итого - один параметр, на самом деле.
Цитата Сообщение от doncelab Посмотреть сообщение
а возвращает одно значение
Ссылка, указатель, любой контейнер.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 19:38 #3
doncelab, структуру можно свою сделать, если параметры разного типа.

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

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

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

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

2. Передавать объекты в функцию по ссылке. Тогда измененный внутри функции параметр также будет изменен и в блоке, откуда функция была вызвана.
Можно пример для второго варианта?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 19:52 #8
Цитата Сообщение от Vourhey Посмотреть сообщение
Что не понятно?
Вот этот вариант
Цитата Сообщение от Vourhey Посмотреть сообщение
Ссылка, указатель, любой контейнер.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
06.12.2012, 19:55 #9
C++
1
void a(int (&b)[4])
0
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 20:05  [ТС] #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], а остальные нет
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 20:06 #11
Цитата Сообщение от doncelab Посмотреть сообщение
вызов
Плохо вызываете.
используйте вариант Vourhey.
0
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 20:11  [ТС] #12
попробовал такой вариант
C
1
DoubleToInt(aa, (&bb)[4]);
видится только b[0]
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.12.2012, 20:16 #13
Цитата Сообщение от doncelab Посмотреть сообщение
DoubleToInt(aa, (&bb)[4])
Вызов
C++
1
DoubleToInt(aa, bb)
Прототип, думаю, сами напишете.
0
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.12.2012, 20:19 #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
}
0
doncelab
3 / 3 / 0
Регистрация: 03.12.2012
Сообщений: 55
06.12.2012, 20:38  [ТС] #15
Огромное спасибо все получилось.
0
06.12.2012, 20:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 20:38
Привет! Вот еще темы с ответами:

Что может вернуть функция? - C++
Я знаю что функция может вернуть значение, указатель и структуру, и составил примеры этих функций - это что-то типа конспекта, но мне...

Функция в качестве параметра - C++
Я не знаю, как передать функцию в качестве параметра. При обработке программа никаких ошибок не выдает, но результат печатает неверный. ...

Функция должна принять указатель на саму себя - C++
не рекурсия. (ошибка в названии) Функция должна принять указатель на саму себя. моя неверная попытка имеет вид int myfunc(int...

Функция strcpy () - строка должна быть пустой? - C++
Здравствуйте! Возник вопрос: пусть имеются две непустые строки s1 и s2. Правильно ли копировать содержимое строки s2 в строку s1? Или...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.