Вызывающие функции и возвращаемые значения

#c

#c

Вопрос:

Я новичок в C .У меня есть функция, которая возвращает некоторые параметры, которые мне нужны для использования в остальной части моей программы.Я пытаюсь получить доступ к этой функции в другом классе.Я смущен тем, как я могу это сделать…Кто-нибудь, пожалуйста, может мне помочь ..?

Ниже приведен мой код :

  void SampleProgram :: myFunction()
   {
         string sInput;
         GetInfo  getInfo(sInput);  //creating instance of the class containing the function

            string sSw="";
       string sName="ram";
       string sList="list";

           getInfo.getRequiredInfo(sSw,sName,sList); //calling the function

    }
  

Как я могу получить доступ к выходным параметрам getRequiredInfo() ..?и сохраните его, если параметры вывода следующие: имя строки, состояние int
Пожалуйста, помогите мне…

Комментарии:

1. Непонятно, что вы хотите здесь сделать. Что такое выходные параметры getRequiredInfo и что вы подразумеваете под их сохранением?

2. Моя функция getRequiredInfo () принимает три входных параметра и возвращает 2 выходных параметра. Мне нужно получить доступ к этим двум параметрам в моей вызывающей функции myFunction () .. как я могу это сделать ..?

Ответ №1:

Вам пришлось бы показать нам объявление getRequiredInfo(), но предположительно это что-то вроде

 X result = getInfo.getRequiredInfo(sSw,sName,sList);
  

Мы не знаем, что такое X, не видя этого объявления.

Ответ №2:

Чтобы getRequiredInfo получить адрес строк, попробуйте следующее:

 getInfo.getRequiredInfo(amp;sSw, amp;sName, amp;sList);
  

Теперь функция может изменять значение аргументов.

Ответ №3:

Вы можете возвращать единственное значение в функции.

таким образом, вы можете создать структуру, содержащую string и int, и возвращать это как результат.

     struct
    {
           string name;
            int    k;
    }resu<
    result r = getInfo.getRequiredInfo(sSw,sName,sList); //calling the function
  

вы можете сохранить выходные параметры следующим образом:

    string _name;
   int       nk;

   _name = r.name;
   nk    = r.k;
  

Ответ №4:

Самым простым было бы вернуть a pair<string,int> из функции. Таким образом, ваша функция signarutre была бы pair<string,int> getRequiredInfo(const stringamp; s1, const stringamp; s2, constr stringamp; s3); . Затем вы можете получить доступ к string и int части usinf first и second членам pair .

Ответ №5:

Звучит так, как будто getRequiredInfo имеет поведение как чтения из, так и записи в некоторые из переданных вами параметров.

В C , в отличие от C #, нет способа указать, что функция должна изменять значение заданного параметра. Действительно, если вы определили свою функцию следующим образом:

 void GetInfo::getRequiredInfo(string a, string b, string c);
  

тогда все три параметра будут передаваться по значению, что означает, что любые изменения, внесенные в них внутри функции, будут изменять копии этих объектов, а не сами объекты.

Как предлагали другие участники, если вы действительно хотите изменить переданные вами параметры, вы могли бы сделать это, передав ссылки:

 void GetInfo::getRequiredInfo(string a, stringamp; b, stringamp; c);
  

или (что более типично) путем передачи указателей:

 void GetInfo::getRequiredInfo(string a, string* b, string* c);
  

Однако, если вы хотите, чтобы ваша функция просто считывала параметры и возвращала значение (что является более общепринятым термином для того, что вы называете «выходными параметрами»), тогда вам нужно выразить свой кортеж «имя статус» как одно значение.

Вы могли бы использовать встроенный pair шаблон, как только что предложил кто-то другой:

 pair<string,int> getRequiredInfo(string a, string b, string c);
  

Или вы могли бы определить свою собственную структуру для этого, как кто-то другой предложил:

 struct NameAndStatus
{
    string name;
    int status;
};

NameAndStatus getRequiredInfo(string a, string b, string c);