Родились сегодня:
lSemperFi


Лидеры рейтинга

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

391

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Советник

379

Россия, Санкт-Петербург


ID: 401888

puporev

Профессор

215

Россия, Пермский край


ID: 400669

epimkin

Профессионал

111


ID: 405338

vovaromanov.jr

1-й класс

103


ID: 242862

Hunter7007

Мастер-Эксперт

29

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

25

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-27 22:16:01-standard


Создание программ на языках C и C++.

Администратор раздела: CradleA (Мастер-Эксперт)

Консультация онлайн # 108962

Раздел: С / С++
Автор вопроса: Боднарчук Андрій Васильович
Дата: 11.11.2007, 19:20 Консультация закрыта
Поступило ответов: 5

Можно ли в С++ с помощью функции вернуть два или больше значений (Например как в паскале процедуры). Каким образом это можна сделать. За рание благодарен.

Ответ # 193274 от Argus98
Здравствуйте, Боднарчук Андрій Васильович!
в C++ два значения функция напрямую возвращать не может. если вам нужно оперировать с какой-то второй переменной, вы можете передать функции указатель на значение этой переменной в качестве аргумента. смотрите в приложении пример на msvc++ 2005

Приложение:


Argus98

Посетитель
11.11.2007, 19:33
Ответ # 193276 от Petya-kurochkin
Здравствуйте, Боднарчук Андрій Васильович!
Ну вообще не помнится, что бы в паскале можно было возвращать больше двух значений) Тем более, если это процедура, а не функция =)
Далее, как промежуточный вариант, думаю, что можно вернуть результат работыы в параметре ф-ции, тогда тут два варианта:

1.
void FuncReturn(int *pInt)
{
*pInt=2;
};

int main()
{
int i=0;
FuncReturn(&i); //Теперь i==2
};

2. С помощью неявных укащателей:

void FuncReturn(int &OutValue)
{
OutValue=5;
};

int main()
{
int iTest=0;
FuncReturn(iTest); //Теперь iTest==5
};

Petya-kurochkin

Посетитель
11.11.2007, 19:41
Ответ # 193277 от SiRuS
Здравствуйте, Боднарчук Андрій Васильович!
Ф-ции в с/с++ могу возвращать только одно значение. Но, этим значением может быть и структура и класс -> вернётся тот объём данных, который вам нужен. В приложении показано как возвращается структура содержащая две переменные.

Приложение:


SiRuS

Посетитель
11.11.2007, 19:46
Ответ # 193278 от Navnav
Здравствуйте, Боднарчук Андрій Васильович!
При переходе с Pascal, неприятно узнать, что в Си нет процедур, однако на деле способ передачи данных в Си очень похож на паскалевский:
Передача параметров по ссылке. Ссылочный параметр – это псевдоним соответствующего аргумента. Для указания, что параметр передается по ссылке, после параметра стравится символ “&”. Например:
void fun2(double &, int &); // Прототип
Вызов такой функции осуществляется:
fun2(d,r);
При таком вызове передается не переменная, а ее адрес, полученный с использованием операции “взять адрес”. Следовательно, при обращении к временной переменной в действительности происходит обращение к исходной переменной в вызывающей функции.
Передача параметров по указателю.
В отличии от передачи по ссылке адрес переменной передается в функцию не с использованием операции разадресации (&), а операцией косвенной адресации (*). В результате передается не сама переменная, а указатель на нее. Например:
void fun3(double *, int *); // Прототип
Вызов такой функции осуществляется:
fun3(&f,&k);
Здесь тоже все изменения, происходящие внутри функции приводят к изменению пременных в вызывающей программе.
В Паскале все это пришется с использованием var в описании формальных параметров.


Navnav

Посетитель
11.11.2007, 19:48
Ответ # 193322 от Титов Михаил Анатольевич
Здравствуйте, Боднарчук Андрій Васильович!
Функция ВСЕГДА возвращает одно значение. В том числе и в Паскале. Однако возвращаемое значение не обязательно должно быть скалярной величиной.
Но, судя по вопросу, Вас интересует как в Си сделать нечто вроде паскалевского параметра-переменной?

В Си (а равно С++) аргументы функций всегда передаются по значению. Для того, что бы можно было через параметры ВЕРНУТЬ значение, или несколько значений, параметры должены быть указателями на переменные, существующие в вызывающем коде.

Тему указателей довольно обширна, но ничего особо хитрого. Пример в приложении.

Приложение:


Титов Михаил Анатольевич

Посетитель
12.11.2007, 04:34
Мини-форум консультации # 108962
Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 162

Gluck

9-й класс

Рейтинг: 81

Коцюрбенко Алексей Владимирович

Старший модератор

Рейтинг: 70

CradleA

Мастер-Эксперт

Рейтинг: 1

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0